Zmiana komunikatu git commit po push (biorąc pod uwagę, że nikt nie wyciągnął z remote)
Wykonałem commit git, a następnie push. Chciałbym zmienić komunikat commit. Jeśli dobrze rozumiem, nie jest to wskazane, ponieważ ktoś mógł wyciągnąć ze zdalnego repozytorium zanim dokonam takich zmian. Co jeśli Wiem, że nikt nie pociągnął?
Jest na to sposób?
11 answers
Zmiana historii
Jeśli jest to najnowszy commit, możesz po prostu to zrobić:
git commit --amend
Wyświetla edytor z Ostatnią wiadomością zatwierdzającą i pozwala edytować wiadomość. (Możesz użyć -m
, jeśli chcesz usunąć starą wiadomość i użyć nowej.)
Pchanie
A kiedy naciskasz, zrób to:
git push --force-with-lease <repository> <branch>
Lub możesz użyć "+":
git push <repository> +<branch>
Lub możesz użyć --force
:
git push --force <repository> <branch>
Należy zachować ostrożność podczas używania tych polecenia.
-
Jeśli ktoś inny wypchnął zmiany do tej samej gałęzi, prawdopodobnie chcesz uniknąć zniszczenia tych zmian. Opcja
--force-with-lease
jest najbezpieczniejsza, ponieważ zostanie przerwana, jeśli pojawią się jakiekolwiek zmiany ( Jeśli nie określisz gałęzi jawnie, Git użyje domyślnych ustawień push. Jeśli domyślnym ustawieniem push jest "dopasowanie", możesz zniszczyć zmiany w kilku gałęziach jednocześnie.
Ciągnięcie / pobieranie potem
Każdy, kto już wyciągnął, otrzyma komunikat o błędzie i będzie musiał zaktualizować (zakładając, że sam nie wprowadza żadnych zmian), robiąc coś takiego:
git fetch origin
git reset --hard origin/master # Loses local commits
Należy zachować ostrożność podczas stosowania leku reset --hard
. Jeśli masz zmiany w gałęzi, te zmiany zostaną zniszczone.
Notka o modyfikowaniu historii
Zniszczone dane to tak naprawdę stara wiadomość zatwierdzająca, ale --force
tego nie wie i chętnie usunie również inne dane. Więc pomyśl o --force
jako o " chcę zniszczyć dane i wiem na pewno, jakie dane są niszczone."Ale kiedy zniszczone dane są zatwierdzane, często można odzyskać stare commity z reflogu-dane są w rzeczywistości osierocone zamiast zniszczone (chociaż osierocone commity są okresowo usuwane).
Jeśli uważasz, że nie niszczysz danych, trzymaj się z dala od --force
... złe rzeczy mogą się zdarzyć .
Dlatego --force-with-lease
jest nieco bezpieczniejsze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37
Po Prostu powiedz:
git commit --amend -m "New commit message"
and then
git push --force
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-02 15:14:38
Może się spóźnić na imprezę, tutaj nie widzę odpowiedzi.
Step1: git rebase -i HEAD~n
aby wykonać interaktywną rebase dla ostatnich n
commitów, których to dotyczy.
Git wyświetli edytor do obsługi tych zmian, zauważ to polecenie: # r, reword = use commit, but edit the commit message
, dokładnie tego potrzebujemy.
Krok 2: Zmień pick
na r
dla tych commitów, które chcesz zaktualizować msg.
Zapisz i zamknij Edytor.
Krok 3 : w następujących plikach commit zaktualizuj MSG commit jako lubisz
Krok 4: po zaktualizowaniu wszystkich zmian MSG. możesz zrobić git push -f
, aby zaktualizować pilota.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-08 16:41:24
Użyj tych dwóch kroków w konsoli:
git commit --amend -m "new commit message"
And then
git push -f
Zrobione :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 09:48:45
Należy zauważyć, że jeśli użyjesz {[0] } z mutiple refs, wszystkie zostaną zmodyfikowane w wyniku tego. Upewnij się, że zwracasz uwagę na to, gdzie twój Git repo jest skonfigurowany do wypychania. Na szczęście istnieje sposób, aby nieco zabezpieczyć proces, określając pojedynczą gałąź do aktualizacji. Czytaj ze stron podręcznika git:
Zauważ, że -- force stosuje się do wszystkich refów, które są wypychane, stąd użycie to z push.domyślne ustawienie dopasowania lub z wieloma push miejscowości skonfigurowany za pomocą pilota.*.push może nadpisać refs inne niż obecny Oddział (w tym lokalne refy, które są ściśle za ich odległy odpowiednik). Aby wymusić naciśnięcie tylko na jedną gałąź, użyj + przed refspec do push (np. git push origin +master do force push to the master branch).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-23 23:47:16
Jeśli chcesz zmodyfikować starszy commit, a nie ostatni, musisz użyć polecenia rebase
, jak wyjaśniono tutaj, Strona pomocy Github, na zmieniając wiadomość o starszych lub wielu komunikatach commit
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-28 10:43:22
Polecenie 1.
git commit --amend -m "New and correct message"
Wtedy,
Polecenie 2.
git push origin --force
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-30 13:11:26
git commit --amend
Następnie Edytuj i zmień wiadomość w bieżącym oknie. Po tym zrobić
git push --force-with-lease
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-12 11:59:43
To działa dla mnie całkiem dobrze,
Git checkOut origin / branchname
Jeśli jesteś już w branchu to lepiej zrobić pull lub rebase
git pull
Lub
git -c core.quotepath=false fetch origin --progress --prune
Później możesz po prostu użyć
git commit --amend -m "Your message here"
Lub jeśli chcesz otworzyć edytor tekstu, użyj
git commit --amend
Wolę używać edytora tekstu, jeśli masz wiele komentarzy. Możesz ustawić preferowany edytor tekstu za pomocą polecenia
git config --global core.editor your_preffered_editor_here
W każdym razie, kiedy skończysz zmieniać komunikat commit, zapisz go and exit
And then run
git push --force
And you ' re done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-12 13:51:53
Inną opcją jest utworzenie dodatkowego "zatwierdzania errata" (i push), które odwołuje się do obiektu zatwierdzania, który zawiera błąd - nowy zatwierdzanie errata również zapewnia korektę. Commit errata to commit Bez istotnych zmian kodu, ale ważny komunikat commit - na przykład dodaj jeden znak spacji do pliku readme i commit, który zmienia się wraz z ważnym Komunikatem commit, lub użyj opcji git --allow-empty
. Jest na pewno łatwiejsze i bezpieczniejsze niż rebasing, nie modyfikuje prawdziwa historia i utrzymuje drzewo gałęzi w czystości (użycie amend
jest również dobrym wyborem, jeśli poprawiasz najnowszy commit, ale commit errata może być dobrym wyborem dla starszych commitów). Tego typu rzeczy tak rzadko się zdarzają, że samo udokumentowanie błędu jest wystarczająco dobre. W przyszłości, jeśli będziesz musiał przeszukiwać dziennik git w poszukiwaniu słowa kluczowego feature, oryginalny (błędny) commit może nie pojawić się, ponieważ w oryginalnym commicie (oryginalna literówka) użyto niewłaściwego słowa kluczowego -- jednakże, słowo kluczowe pojawi się w zatwierdzeniu errata, które następnie wskaże Ci oryginalny commit, który miał literówkę. Oto przykład:
$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Author: First Last Date: Wed Aug 8 15:55:52 2018 -0600 Errata commit: This commit has no substantive code change. This commit is provided only to document a correction to a previous commit message. This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1 Original incorrect commit message: Changed background color to red Correction (*change highlighted*): Changed background color to *blue* commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Author: First Last Date: Wed Aug 8 15:43:16 2018 -0600 Some interim commit message commit e083a7abd8deb5776cb304fa13731a4182a24be1 Author: First Last Date: Wed Aug 8 13:31:32 2018 -0600 Changed background color to red
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-09 15:16:03
Dodatkowe informacje dotyczące tego samego problemu, jeśli używasz Bitbucket pipeline
Edytuj wiadomość
git commit --amend
Push to the sever
git push --force <repository> <branch>
Następnie dodaj --force do polecenia push w potoku
git ftp push --force
Spowoduje to usunięcie poprzednich commitów i przesunięcie bieżącego.
Wypróbowałem go na bitbucket pipeline i działa dobrze]}Usuń --force po pierwszym naciśnięciu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-05 09:26:22