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?

Author: k0pernikus, 2012-01-24

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.

 1049
Author: Dietrich Epp,
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
 311
Author: Manish Shrivastava,
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.

 154
Author: Jinsong Li,
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 :)

 35
Author: Abdul Rizwan,
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).

 17
Author: Steve Benner,
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

 9
Author: Carlos,
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
 6
Author: Teo Choong Ping,
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
 3
Author: Beulah Sheeba,
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

 1
Author: Hasasn,
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
 1
Author: rob_7cc,
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.

Usuń --force po pierwszym naciśnięciu

Wypróbowałem go na bitbucket pipeline i działa dobrze]}
 0
Author: Abdallah Awwad Alkhwaldah,
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