Przesłałem zmianę do projektu Open Source na Githubie i otrzymałem komentarze do recenzji kodu od jednego z głównych członków zespołu.
Chciałbym zaktualizować kod, uwzględniając komentarze do recenzji, i ponownie go przesłać. Jaki jest najlepszy przepływ pracy w tym celu? Z mojej ograniczonej wiedzy na temat git / github mogłem wykonać jedną z następujących czynności:
Zaktualizuj kod jako nowy zatwierdzenie i dodaj zarówno początkowe, jak i zaktualizowane zatwierdzenie do mojego żądania ściągnięcia.
Jakoś (??) wycofaj stary zatwierdzenie z mojego repozytorium i utwórz pojedynczy nowy zatwierdzenie zawierający wszystko, a następnie wygeneruj żądanie ściągnięcia?
git commit
ma funkcję zmiany, ale słyszałem, że nie powinieneś jej używać po wypchnięciu zatwierdzenia poza lokalne repozytorium? W tym przypadku dokonałem zmiany na moim lokalnym komputerze i przesłałem do mojego oddziału github projektu. Czy użycie „zmiany” byłoby w porządku?Coś innego?
Wygląda na to, że opcja 2/3 byłaby fajna, ponieważ projekt open source miałby tylko jedno zatwierdzenie w swojej historii, które implementowałoby wszystko, ale nie jestem pewien, jak to zrobić.
Uwaga: nie wiem, czy to wpływa na odpowiedź, czy nie, ale nie wprowadziłem zmian w osobnej gałęzi, po prostu zrobiłem zatwierdzenie na master
źródło
master
jest także gałąź, więc technicznie nie ma to znaczenia :)Aby zaktualizować żądanie ściągnięcia
Aby zaktualizować żądanie ściągnięcia (punkt # 1), jedyne, co musisz zrobić, to wyewidencjonować ten sam oddział, z którego pochodzi żądanie ściągnięcia i wcisnąć ponownie:
Opcjonalnie - czyszczenie historii zatwierdzeń
Możesz zostać poproszony o zmiażdżenie twoich zatwierdzeń, aby historia repozytorium była czysta, lub sam chcesz usunąć pośrednie zatwierdzenia, które odwracają uwagę od „wiadomości” w twoim żądaniu ściągnięcia (punkt # 2). Na przykład, jeśli historia zatwierdzeń wygląda następująco:
Dobrym pomysłem jest zgniecenie rzeczy razem, aby pojawiły się jako pojedyncze zatwierdzenie:
Spowoduje to monit o wybranie sposobu przepisania historii żądania ściągnięcia, w edytorze pojawi się:
Dla każdego zatwierdzenia, które chcesz być częścią poprzedniego zatwierdzenia - zmień wybierz na squash:
I zamknij edytor. Git przepisze historię i poprosi o podanie komunikatu zatwierdzenia dla jednego połączonego zatwierdzenia. Zmień odpowiednio, a twoja historia zmian będzie teraz zwięzła:
Wciśnij to do widelca:
a twoje żądanie ściągnięcia będzie zawierać pojedynczy zatwierdzenie, zawierające wszystkie zmiany wcześniej podzielone na kilka zatwierdzeń.
Zmiana historii publicznych repozytoriów to zła rzecz
Przepisywanie historii i korzystanie
git push -f
z gałęzi, która potencjalnie już została sklonowana przez inną osobę, jest złą rzeczą - powoduje, że historia repozytorium i historia kasy rozbieżne.Jednak poprawienie historii rozwidlenia w celu skorygowania zmiany, którą zamierzasz zintegrować z repozytorium - jest dobrą rzeczą. W związku z tym nie ma zastrzeżeń wyciskających „hałas” z twoich wniosków ściągania.
Uwaga na temat oddziałów
Powyżej pokazuję, że żądanie ściągnięcia pochodzi z
master
gałęzi twojego widelca, niekoniecznie nie ma w tym nic złego, ale stwarza pewne ograniczenia, takie jak, jeśli jest to twoja standardowa technika, możliwość posiadania tylko jednego PR otwartego dla repozytorium . Lepiej jest jednak utworzyć gałąź dla każdej zmiany, którą chcesz zaproponować:źródło
git push -f
. Nie było wielu komentarzy, ale tego się nie spodziewałem.prune
nie usunie tego odłączonego zatwierdzenia, jego historia nadal będzie pasować do komentarzy PR.