2014-05-09 16:48:06 +0000 2014-05-09 16:48:06 +0000
135
135

Czy istnieje sposób, aby edytować wiadomość commit na GitHubie?

Czy istnieje sposób na edycję komunikatu commit po zatwierdzeniu i wysłaniu do GitHuba? Widzę, że istnieje ‘dodaj notatkę’, jak również komentowanie inline, ale nie ma faktycznej edycji wiadomości commit. Istnieje również ‘amend commit’ w rozszerzeniach git, ale to nie edytuje istniejącej wiadomości.

Odpowiedzi (5)

189
189
189
2014-05-10 10:27:44 +0000
  1. git rebase -i <commit hash you want to change>^

  2. Dla każdego commitu, dla którego chcesz zmienić komunikat, zmień pick na reword.

  3. Zapisz i zakończ (w vi: :wq).

  4. Dla każdego takiego commitu dostaniesz edytor do edycji komunikatu commit. Zmień go według własnego uznania, zapisz i zakończ pracę.

  5. Możesz teraz przesłać je do githuba używając git push origin --force.

Jeśli chcesz tylko poprawić swój ostatni commit, możesz zastąpić kroki 1-4 za pomocą git commit --amend.

35
35
35
2018-06-18 09:49:45 +0000

W Intellij Idea możesz to zrobić tak łatwo.

  1. Otwórz Kontrolę wersji (Historia)
  2. Wybierz zakładkę log
  3. Wybierz commit aby zmienić komentarz
  4. Naciśnij F2 (Mac fn + F2), i zaktualizuj wiadomość commit
3
3
3
2019-03-14 07:29:36 +0000

Założenie:

jeśli twój git-graph wygląda jak …

O target-commit that you want to change its message [df9c192]
|
O parent-commit [b7ec061]
|
O

(df9c192 i b7ec061 są hasłami commitów target-commit i parent-commit, oddzielnie)

Rozwiązanie:

możesz po prostu wpisać następujące instrukcje…

git reset --soft b7ec061
git commit -m "your_new_description"
git push -f

Objaśnienie:

  1. git reset --soft b7ec061 zachowa twoje zmiany plików i zresetuje do parent-commit (tj. b7ec061)
  2. git commit -m "..." utworzy lokalnie nowy commit
  3. git push -f wypchnie twój nowy commit na serwer i zastąpi stary (np. df9c192)
2
2
2
2018-08-08 22:27:59 +0000

Inną opcją jest utworzenie dodatkowego “errata commit” (i popchnięcie), który odwołuje się do obiektu commit, który zawiera błąd - nowy commit errata również dostarcza poprawkę. Zobowiązanie errata jest zobowiązaniem bez istotnych zmian w kodzie, ale z ważną wiadomością o zobowiązaniu - na przykład, dodaj jeden znak spacji do pliku readme i popełnij tę zmianę z ważną wiadomością o zobowiązaniu, lub użyj opcji git --allow-empty. Jest to z pewnością łatwiejsze i bezpieczniejsze niż rebasing, nie modyfikuje prawdziwej historii i utrzymuje drzewo gałęzi w czystości (użycie amend jest również dobrym wyborem, jeśli poprawiasz najnowszy commit, ale errata commit może być dobrym wyborem dla starszych commitów). Tego typu rzeczy zdarzają się tak rzadko, że samo udokumentowanie błędu jest wystarczająco dobre. W przyszłości, jeśli będziesz musiał przeszukać dziennik git w poszukiwaniu słowa kluczowego, oryginalne (błędne) commit może się nie pojawić, ponieważ błędne słowo kluczowe zostało użyte w tym oryginalnym commicie (oryginalna literówka) - jednak słowo kluczowe pojawi się w errata commit, który wskaże ci oryginalny commit, w którym była literówka. 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
0
0
0
2019-08-24 11:01:51 +0000

Odpowiedź @Mureinik ](https://superuser.com/a/751909/248836) jest dobre, ale niezrozumiałe dla początkujących.

Pierwsza metoda:

  1. Jeśli chcesz edytować tylko najnowszą wiadomość commit, potrzebujesz tylko git commit --amend, zobaczysz:
<your existing commit mesage foo bar> 

# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# On branch is up to date with 'origin/master'.
#
# changes to be committed:
# modified: foo.py
#
  1. Jak widzisz, commit message na górze bez żadnego przedrostka polecenia, takiego jak pick, to jest już edit page i możesz kierować edit the top message i save&quit , np:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. Następnie wykonaj git push -u origin master --force lub <how you push normally> --force. Kluczem jest tutaj --force.

Druga metoda:

  1. Możesz zobaczyć commit hash przez git log lub wyodrębnić z adresu url repozytorium, przykład w moim przypadku to 881129d771219cfa29e6f6c2205851a2994a8835

  2. Następnie możesz zrobić git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835 lub git rebase -i HEAD^ (jeśli najnowszy)

  3. Zobaczyłbyś:

pick <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
  1. Ale jeśli zobaczysz noop to prawdopodobnie źle wpisujesz, np. jeśli zrobisz git rebase -i 881129d771219cfa29e6f6c2205851a2994a88, w którym brakuje ^ na końcu, to lepiej wyjdź z edytora bez zapisywania i znajdź przyczynę:
noop

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
  1. Jeśli nie ma problemu z noop, to po prostu zmień słowo pick na reword , inne po prostu pozostają (nie edytujesz komunikatu commit w tym momencie), np. g:
reword <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
  1. Po zapisaniu i zamknięciu pojawi się edit page podobny do tego z metody #1:
<your existing commit mesage foo bar> 

# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# interactive rebase in progress; onto b057371
# Last command done (1 command done):
# reword d996ffb <existing commit message foo bar>
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'b057371'.
#
# changes to be committed:
# modified: foo.py
#
  1. Edytuj wiadomość na górze, tak samo jak w metodzie #1 i zapisz i zakończ, np:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. Ponownie, tak samo jak w metodzie #1, zrób git push -u origin master --force lub <how you push normally> --force. Kluczem jest tutaj --force.

Dla więcej informacji przeczytaj the doc .