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

Gibt es eine Möglichkeit, eine Commit-Nachricht auf GitHub zu bearbeiten?

Gibt es eine Möglichkeit, eine Commit-Nachricht nach dem Commit und dem Pushen auf GitHub zu bearbeiten? Ich sehe, dass es eine “Add a note” sowie Inline-Kommentare gibt, aber keine tatsächliche Bearbeitung einer Commit-Nachricht. Es gibt auch “amend commit” in den Git-Erweiterungen, aber das bearbeitet nicht die bestehende Nachricht.

Antworten (5)

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

  2. Für jede Übertragung, bei der Sie die Nachricht ändern möchten, ändern Sie pick in reword.

  3. Speichern und beenden Sie (in vi: :wq).

  4. Für jeden solchen Commit erhalten Sie einen Editor, um die Commit-Nachricht zu bearbeiten. Ändern Sie sie nach Ihrem Ermessen, speichern und beenden Sie.

  5. Sie können sie nun mit git push origin --force auf github hochladen.

Wenn Sie nur Ihren letzten Commit korrigieren müssen, können Sie die Schritte 1-4 durch git commit --amend ersetzen.

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

In Intellij Idea können Sie das ganz einfach tun.

  1. Öffnen Sie die Versionskontrolle (History)
  2. Wählen Sie die Registerkarte Log
  3. Wählen Sie Commit, um den Kommentar zu ändern
  4. Drücken Sie F2 (Mac fn + F2), und aktualisieren Sie Ihre Commit-Nachricht
3
3
3
2019-03-14 07:29:36 +0000

Prämisse:

wenn Ihr Git-Graph aussieht wie …

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

(df9c192 und b7ec061 sind die Commit-Hashes von target-commit und parent-commit, getrennt)

Lösung:

Sie können einfach die folgenden Anweisungen eingeben…

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

Erläuterung:

  1. git reset --soft b7ec061 wird Ihre Änderungen an Dateien beibehalten und auf parent-commit zurücksetzen (d.h. b7ec061)
  2. git commit -m "..." wird lokal einen neuen Commit erstellen
  3. git push -f überträgt Ihren neuen Commit auf den Server und ersetzt den alten (z.B. df9c192)
2
2
2
2018-08-08 22:27:59 +0000

Eine andere Möglichkeit ist, einen zusätzlichen “Errata-Commit” zu erstellen (und zu pushen), der auf das Commit-Objekt verweist, das den Fehler enthält – der neue Errata-Commit liefert auch die Korrektur. Ein Errata-Commit ist ein Commit ohne wesentliche Änderungen am Code, aber mit einer wichtigen Commit-Nachricht – fügen Sie zum Beispiel ein Leerzeichen in Ihre Readme-Datei ein und committen Sie diese Änderung mit der wichtigen Commit-Nachricht, oder verwenden Sie die Git-Option --allow-empty. Es ist sicherlich einfacher und sicherer als ein Rebasing, es verändert nicht die wahre Historie und es hält den Zweigbaum sauber (amend zu verwenden ist auch eine gute Wahl, wenn Sie den jüngsten Commit korrigieren, aber ein Errata-Commit ist vielleicht eine gute Wahl für ältere Commits). Diese Art von Dingen passiert so selten, dass es ausreicht, den Fehler zu dokumentieren. Wenn Sie in Zukunft das Git-Protokoll nach einem Schlüsselwort für eine Funktion durchsuchen müssen, kann es sein, dass der ursprüngliche (fehlerhafte) Commit nicht auftaucht, weil das falsche Schlüsselwort in diesem ursprünglichen Commit verwendet wurde (der ursprüngliche Tippfehler) – das Schlüsselwort wird jedoch im Errata-Commit auftauchen, der Sie dann zu dem ursprünglichen Commit führt, der den Tippfehler hatte. Hier ist ein Beispiel:

$ 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

Antwort von @Mureinik ist gut, aber für Neulinge nicht verständlich.

Erste Methode:

  1. Wenn Sie nur die letzte Commit-Nachricht bearbeiten wollen, dann brauchen Sie nur git commit --amend, Sie würden sehen:
<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. Wie Sie sehen können, steht die Commit-Nachricht oben ohne ein Präfix des Befehls wie pick, dies ist bereits die Bearbeitungsseite und Sie können direkt die oberste Nachricht bearbeiten und sichern&beenden, z.B.:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. Dann machen Sie git push -u origin master --force oder <how you push normally> --force. Der Schlüssel ist hier --force.

Zweite Methode:

  1. Sie können den Commit-Hash mit git log sehen oder aus der Repository-URL extrahieren, in meinem Fall z.B. 881129d771219cfa29e6f6c2205851a2994a8835

  2. Dann können Sie git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835 oder git rebase -i HEAD^ (wenn die neueste)

  3. Sie würden sehen:

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. Wenn Sie aber noop sehen, dann haben Sie sich wahrscheinlich vertippt, z. B. wenn Sie git rebase -i 881129d771219cfa29e6f6c2205851a2994a88 machen, bei dem am Ende ^ fehlt, dann beenden Sie besser den Editor ohne zu speichern und finden Sie den Grund heraus:
noop

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
  1. Wenn kein noop Problem auftritt, dann ändern Sie einfach das Wort pick in reword , das andere bleibt einfach bestehen (Sie bearbeiten die Commit-Meldung an dieser Stelle nicht), z. z. B.:
reword <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
  1. Save&quit zeigt die Bearbeitungsseite, ähnlich wie Methode #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. Bearbeiten Sie die Nachricht oben, wie bei Methode #1 und save&quit, z. B.:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. Wiederum, wie bei Methode #1, machen Sie git push -u origin master --force oder <how you push normally> --force. Der Schlüssel ist hier --force.

Für weitere Informationen lesen Sie bitte das Dokument .