Chcę zmodyfikować komunikat o zmianach głębiej w historii i wypchnąłem wiele nowych zatwierdzeń.
Jak zmienić wiadomość dotyczącą zatwierdzenia? Czy to możliwe?
źródło
Chcę zmodyfikować komunikat o zmianach głębiej w historii i wypchnąłem wiele nowych zatwierdzeń.
Jak zmienić wiadomość dotyczącą zatwierdzenia? Czy to możliwe?
Wiadomość od Linusa Torvaldsa może odpowiedzieć na Twoje pytanie:
Zmodyfikuj / edytuj stare komunikaty o zatwierdzeniach
Krótka odpowiedź: nie możesz (jeśli jest popchnięty).
ekstrakt (Linus odnosi się do BitKeepera jako BK):
Na marginesie, tylko ze względów historycznych: w BK można.
A jeśli byłeś do tego przyzwyczajony (tak jak ja), było to bardzo praktyczne. Zastosowałbym bombę łatkową od Andrew, zauważyłem, że coś jest nie tak i po prostu wyedytowałem to przed wypchnięciem.
Mogłem zrobić to samo z git. Byłoby dość łatwo, gdyby tylko komunikat o zatwierdzeniu nie był częścią nazwy, a mimo to gwarantował, że historia pozostała nietknięta, i pozwolił na „późniejsze naprawienie komentarzy”.
Ale tego nie zrobiłem.
Po części jest to czysto „wewnętrzna spójność”. Git jest po prostu czystszym systemem dzięki temu, że wszystko jest chronione SHA1, a wszystkie obiekty są traktowane tak samo, niezależnie od typu obiektu. Tak, istnieją cztery różne rodzaje obiektów i wszystkie są naprawdę różne i nie można ich używać w ten sam sposób, ale w tym samym czasie, nawet jeśli ich kodowanie może być inne na dysku, koncepcyjnie wszystkie działają dokładnie to samo.
Jednak wewnętrzna spójność nie jest tak naprawdę wymówką dla bycia nieelastycznym i oczywiście byłoby bardzo elastyczne, gdybyśmy mogli po prostu naprawić błędy po ich wystąpieniu. Więc to nie jest naprawdę mocny argument.
Prawdziwy powód git nie pozwalają na zmianę zatwierdzenia końce wiadomość UP jest bardzo prosta: w ten sposób można zaufać wiadomości. Jeśli później pozwoliłeś ludziom je zmieniać, wiadomości z natury nie są zbyt godne zaufania.
Aby być kompletny, to mógłby przepisać z lokalnym popełnienia historii, aby odzwierciedlić to, co chcesz, jak sugeruje Sykora (z pewnym rebase i zresetować --hard, ciężko oddychać!)
Jednak po opublikowaniu poprawioną historią ponownie (z git push origin +master:master
The +
znak zmuszając push występuje, nawet jeśli to nie skutkuje w „fast-forward” commit) ... ty może dostać się w kłopoty .
Wyciąg z tego innego pytania SO:
Właściwie raz przepchnąłem się z --force do repozytorium git.git i zostałem zbesztany przez Linusa BIG TIME. Stworzy to wiele problemów innym ludziom. Prosta odpowiedź brzmi „nie rób tego”.
Obecnie zastąpienie gita może załatwić sprawę.
Szczegóły: Utwórz tymczasową gałąź pracy
Przywróć zobowiązanie do zastąpienia
Zmień zmianę, dodając odpowiednią wiadomość
Zastąp stary commit nowym
wróć do oddziału, w którym byłeś
usuń gałąź tymczasową
Pchać
Gotowe.
źródło
Możesz użyć
git rebase -i
(w stosunku do gałęzi, z której się rozgałęziłeś) „i” do interakcji.Zastąp
pick
następny komentarz do zatwierdzenia, który chcesz zmienić,r
(lubreword
), zapisz i zakończ, a po wykonaniu tej czynności będziesz mógł dokonać edycji.git push
jeszcze raz i gotowe!źródło
-p
argumentu,rebase
któryp
rezerwy łączy.Załóżmy, że masz takie drzewo:
Najpierw
checkout
gałąź tymczasowa:W
temp
gałęzi,reset --hard
do zatwierdzenia, którego treść chcesz zmienić (na przykład, zatwierdzenie to946992
):Użyj,
amend
aby zmienić wiadomość:Po tym drzewo będzie wyglądać następująco:
Następnie
cherry-pick
wszystkie zatwierdzenie, które wyprzedza946992
odmaster
dotemp
i zatwierdza je, użyj,amend
jeśli chcesz również zmienić ich komunikaty:Drzewo wygląda teraz następująco:
Teraz wymuś wypchnięcie gałęzi temp do zdalnego:
Ostatni krok, usuń gałąź
master
lokalną,git fetch origin
aby pobrać gałąźmaster
z serwera, a następnie przełącz się na gałąźmaster
i usuń gałąźtemp
.Teraz zarówno twój lokalny, jak i zdalny będą mieć zaktualizowane wszystkie wiadomości.
źródło
W naszym sklepie wprowadziłem konwencję dodawania rozpoznawalnie nazwanych tagów z adnotacjami do zatwierdzeń z niepoprawnymi wiadomościami i używania adnotacji jako zamiennika.
Mimo że nie pomaga to ludziom, którzy uruchamiają zwykłe polecenia „git log”, zapewnia nam sposób na naprawienie nieprawidłowych odniesień do śledzenia błędów w komentarzach, a wszystkie moje narzędzia do kompilacji i wydania rozumieją konwencję.
Oczywiście nie jest to ogólna odpowiedź, ale może to być coś, co ludzie mogą zastosować w określonych społecznościach. Jestem pewien, że jeśli zostanie użyty na większą skalę, może pojawić się jakiś rodzaj porcelanowego podłoża, w końcu ...
źródło
(Z http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0 )
Myślę, że to powinno odpowiedzieć na twoje pytanie. Należy jednak pamiętać, że jeśli wypchnąłeś kod do zdalnego repozytorium i ludzie z niego wyciągnęli, to zepsuje to ich historię kodu, a także pracę, którą wykonali. Więc rób to ostrożnie.
źródło
Jeśli używasz rozszerzeń Git: przejdź do ekranu Zatwierdź, na dole powinno znajdować się pole wyboru z napisem „Zmień zatwierdzenie”, jak widać poniżej:
źródło