Zrobiłem git commit i późniejszy push. Chciałbym zmienić komunikat zatwierdzenia. Jeśli dobrze rozumiem, nie jest to zalecane, ponieważ ktoś mógł wyciągnąć ze zdalnego repozytorium, zanim dokonam takich zmian. Co jeśli wiem, że nikt nie pociągnął?
Czy jest na to sposób?
Odpowiedzi:
Zmieniająca się historia
Jeśli jest to ostatni zatwierdzenie, możesz po prostu to zrobić:
Spowoduje to wyświetlenie edytora z ostatnią wiadomością zatwierdzenia i umożliwi edycję wiadomości. (Możesz użyć,
-m
jeśli chcesz usunąć starą wiadomość i użyć nowej).Popychanie
A potem, kiedy naciskasz, zrób to:
Lub możesz użyć „+”:
Lub możesz użyć
--force
:Zachowaj ostrożność podczas korzystania z tych poleceń.
Jeśli ktoś wprowadził zmiany do tej samej gałęzi, prawdopodobnie chcesz uniknąć ich zniszczenia. Ta
--force-with-lease
opcja jest najbezpieczniejsza, ponieważ zostanie przerwana, jeśli wystąpią jakiekolwiek zmiany na wcześniejszych etapach (Jeśli nie określisz gałęzi wyraźnie, Git użyje domyślnych ustawień wypychania. Jeśli domyślnym ustawieniem wypychania jest „dopasowanie”, możesz zniszczyć zmiany w kilku oddziałach jednocześnie.
Ciągnięcie / pobieranie później
Każdy, kto już ściągnął, otrzyma teraz komunikat o błędzie i będzie musiał zaktualizować (zakładając, że sami nie wprowadzają żadnych zmian), wykonując coś takiego:
Zachowaj ostrożność podczas używania
reset --hard
. Jeśli masz zmiany w oddziale, zmiany te zostaną zniszczone.Uwaga na temat modyfikacji historii
Zniszczone dane to tak naprawdę stary komunikat zatwierdzenia, ale
--force
nie wie o tym i chętnie usunie także inne dane. Pomyśl więc o tym:--force
„Chcę zniszczyć dane i wiem na pewno, które dane są niszczone”. Ale kiedy zatwierdzone są zniszczone dane, często można odzyskać stare zatwierdzenia z dziennika ponownego logowania - dane są faktycznie osierocone zamiast niszczone (chociaż osierocone zatwierdzenia są okresowo usuwane).Jeśli nie uważasz, że niszczysz dane, trzymaj się z dala od
--force
... złych rzeczy może się zdarzyć .Dlatego
--force-with-lease
jest nieco bezpieczniejszy.źródło
git push --force
bez opcji <repository> i <branch> działa również, jeśli masz skonfigurowane upstream.<repository>
? Czy toorigin
jestorg/repo
? A może po prosturepo
?Tylko powiedz :
i wtedy
źródło
git push origin <BRANCH-NAME>
nie działało, musiałem użyć,git push --force
jak wyjaśniono w zaakceptowanej odpowiedzi.git push --force
, bo inaczej push nie przejdzie.Aby edytować zatwierdzenie inne niż najnowszy:
Krok 1 :
git rebase -i HEAD~n
zrobić interaktywny rebase dla ostatnichn
zatwierdzonych zmian. (tzn. jeśli chcesz zmienić komunikat zatwierdzenia, 3 zatwierdza z powrotem, zróbgit rebase -i HEAD~3
)git wyświetli edytor do obsługi tych zatwierdzeń, zwróć uwagę na to polecenie:
właśnie tego potrzebujemy!
Krok 2 : Zmień
pick
nar
dla zatwierdzeń, które chcesz zaktualizować wiadomość. Nie przejmuj się tutaj zmianą komunikatu zatwierdzenia, zostanie on zignorowany. Zrobisz to w następnym kroku. Zapisz i zamknij edytor.Pamiętaj, że jeśli edytujesz „plan” bazy bazowej, ale nie rozpoczyna się proces umożliwiający zmianę nazwy plików, uruchom:
Jeśli chcesz zmienić edytor tekstu używany w sesji interaktywnej (np. Z domyślnej vi na nano), uruchom:
Krok 3 : Git wyświetli inny edytor dla każdej wprowadzonej
r
wcześniej wersji. Zaktualizuj msg zatwierdzenia, jak chcesz, a następnie zapisz i zamknij edytor.Krok 4 : Po zaktualizowaniu wszystkich zatwierdzeń wiadomości. możesz zrobić,
git push -f
aby zaktualizować pilota.źródło
git rebase -i HEAD~3
git rebase --continue
. A jeśli chcesz zmienić edytor tekstu używany w sesji interaktywnej (np. Z domyślnejvi
nanano
), uruchomGIT_EDITOR=nano git rebase -i HEAD~n
.Użyj tych dwóch kroków w konsoli:
i wtedy
Gotowy :)
źródło
Należy zauważyć, że jeśli użyjesz wielu
push --force
referencji, zostaną one WSZYSTKIE zmodyfikowane. Pamiętaj, aby zwrócić uwagę na to, gdzie repozytorium git jest skonfigurowane do wypychania. Na szczęście istnieje sposób, aby nieco zabezpieczyć ten proces, określając jeden oddział do aktualizacji. Czytaj ze stron man git:źródło
Jeżeli chcesz zmodyfikować starszy popełnienia, nie ostatni, będzie trzeba użyć
rebase
polecenia jak wyjaśniono tu, strona pomocy Github na zmieniający przesłanie starsze lub wielokrotność popełnić wiadomości sekcjęźródło
Polecenie 1 .
Następnie,
Polecenie 2 .
źródło
następnie edytuj i zmień wiadomość w bieżącym oknie. Po tym zrób
źródło
Inną opcją jest utworzenie dodatkowego „zatwierdzenia erraty” (i wypychania), który odwołuje się do obiektu zatwierdzenia zawierającego błąd - nowe zatwierdzenie erraty również zapewnia korektę. Zatwierdzenie erraty jest zatwierdzeniem bez istotnych zmian kodu, ale ważnym komunikatem zatwierdzenia - na przykład dodaj jeden znak spacji do pliku readme i zatwierdź tę zmianę za pomocą ważnego komunikatu zatwierdzenia lub użyj opcji git
--allow-empty
. Jest to z pewnością łatwiejsze i bezpieczniejsze niż ponowne bazowanie, nie modyfikuje prawdziwej historii i utrzymuje drzewo gałęzi w czystości (używającamend
jest również dobrym wyborem, jeśli poprawiasz ostatnie zatwierdzenie, ale zatwierdzenie errata może być dobrym wyborem dla starszych zatwierdzeń). Tego rodzaju rzeczy zdarzają się tak rzadko, że wystarczy udokumentować błąd. W przyszłości, jeśli będziesz musiał przeszukiwać dziennik git w poszukiwaniu słowa kluczowego funkcji, oryginalne (błędne) zatwierdzenie może się nie pojawić, ponieważ w tym oryginalnym zatwierdzeniu użyto niewłaściwego słowa kluczowego (oryginalnej literówki) - pojawi się jednak słowo kluczowe w erracie commit, która następnie wskaże ci oryginalne zatwierdzenie, które zawierało literówkę. Oto przykład:źródło
git commit -m “fixed feature A”
(Załóżmy, że git podaje identyfikator zatwierdzenia e3ab7312 ... ... (później zdasz sobie sprawę, że twoja wiadomość była niepoprawna, więc teraz dokonaj nieistotnej zmiany w pliku, np. Dodając spację do pliku readme lub użyj—allow-empty
opcji git). ..git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
'' 'git notes
że służyłoby to temu samemu celowi, co „errata commit”. Po prostu dodaj notatkę do poprzedniego zatwierdzenia, aby dodać adnotację lub poprawić wszelkie błędy w komunikacie zatwierdzenia:https://git-scm.com/docs/git-notes
To działa dla mnie całkiem dobrze,
git checkout origin / branch name
jeśli jesteś już w oddziale, lepiej zrobić pull lub rebase
lub
Później możesz po prostu użyć
lub jeśli chcesz otworzyć edytor tekstu, użyj
Wolę używać edytora tekstu, jeśli masz wiele komentarzy. Możesz ustawić preferowany edytor tekstu za pomocą polecenia
W każdym razie, kiedy skończysz zmieniać komunikat zatwierdzenia, zapisz go i wyjdź
a następnie biegnij
I jesteś skończony
źródło
dodatkowe informacje dotyczące tego samego problemu, jeśli używasz potoku bitbucket
edytuj swoją wiadomość
wcisnąć do serwera
następnie dodaj --force do polecenia push w potoku
Spowoduje to usunięcie poprzednich zatwierdzeń i przekazanie bieżącego.
wypróbowałem to na rurociągu bitbucket i działa dobrze
źródło