Frage Wie können Sie bestehende, nicht gedrückte Commits ändern?


Ich habe in einer Commit-Nachricht das Falsche geschrieben. Alternativ habe ich vergessen, einige Dateien einzuschließen.

Wie kann ich die Commit Nachricht / Dateien ändern? Das Commit wurde noch nicht gepusht.


7680
2017-10-07 15:44


Ursprung


Antworten:


Änderung der letzten Commit-Nachricht

git commit --amend

öffnet Ihren Editor, so dass Sie die Commit-Nachricht des letzten Commits ändern können. Darüber hinaus können Sie die Commit-Nachricht direkt in der Befehlszeile festlegen mit:

git commit --amend -m "New commit message"

... dies kann jedoch dazu führen, dass mehrzeilige Commit-Nachrichten oder kleine Korrekturen mühsamer eingegeben werden müssen.

Stellen Sie sicher, dass Sie keine Änderungen an der Arbeitskopie haben inszeniert bevor Sie dies tun, oder sie werden auch verpflichtet werden. (Nicht in den Startlöchern Änderungen werden nicht übernommen.)

Ändern der Nachricht eines Commits, das Sie bereits an Ihren Remote-Zweig gesendet haben

Wenn Sie Ihr Commit bereits in Ihre Remote-Zweigstelle verschoben haben, werden Sie es tun Notwendigkeit, das Commit zu erzwingen mit:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

Warnung: Durch Drücken der Taste wird der Remote-Zweig mit dem Status Ihres lokalen Zweiges überschrieben. Wenn es in der entfernten Niederlassung Commits gibt, die Sie in Ihrer lokalen Niederlassung nicht haben, dann Sie werden Verliere diese Verpflichtungen.

Warnung: Seien Sie vorsichtig bei der Änderung von Commits, die Sie bereits mit anderen Personen geteilt haben. Änderungen werden im Wesentlichen übernommen schreibt um sie sollen anders sein SHA IDs, die ein Problem darstellen, wenn andere Benutzer Kopien des alten Commits haben, das Sie neu geschrieben haben. Jeder, der eine Kopie des alten Commits hat, muss ihre Arbeit mit Ihrem neu geschriebenen Commit synchronisieren, was manchmal schwierig sein kann. Stellen Sie also sicher, dass Sie sich beim Versuch, den gemeinsamen Commit-Verlauf neu zu schreiben, mit anderen koordinieren, oder vermeiden Sie das erneute Schreiben gemeinsamer Commits insgesamt.


Verwenden Sie interaktive Rebase

Eine andere Möglichkeit ist die interaktive Wiederbenutzung.
Auf diese Weise können Sie jede Nachricht bearbeiten, die Sie aktualisieren möchten, auch wenn es sich nicht um die letzte Nachricht handelt.

Um einen Git Squash zu machen, folge diesen Schritten:

// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X

Sobald Sie Ihre Commits quetschen - wählen Sie die e/r zum Bearbeiten der Nachricht

enter image description here

Wichtiger Hinweis zur Interaktiven Rebase

Wenn du das benutzt git rebase -i HEAD~X Es kann geben Mehr als X verpflichtet. Git wird alle Commits in der letzten "sammeln" X Commits und wenn es irgendwo dazwischen eine Verschmelzung gibt, sehen Sie auch alle Commits und das Ergebnis wird X + sein.

Guter Tipp:

Wenn Sie es für mehr als einen Zweig tun müssen und Konflikte bei der Änderung des Inhalts auftreten können, richten Sie es ein git rerere und lassen Sie diese Konflikte automatisch für Sie auflösen.


Dokumentation


14790
2018-02-08 04:26



git commit --amend -m "your new message"

2414
2017-10-07 19:52



Wenn das Commit, das Sie beheben möchten, nicht das neueste ist:

  1. git rebase --interactive $parent_of_flawed_commit

    Wenn Sie mehrere fehlerhafte Commits beheben wollen, übergeben Sie die Eltern des ältesten von ihnen.

  2. Ein Editor wird erscheinen, mit einer Liste aller Commits seit dem, den du gegeben hast.

    1. Veränderung pick zu reword (oder auf alten Versionen von Git, zu edit) vor irgendwelchen Commits, die Sie beheben möchten.
    2. Sobald Sie speichern, wird Git die aufgelisteten Commits wiedergeben.
       

  3. Für jedes Commit, das Sie möchten umformulierenGit lässt dich zurück in deinen Editor. Für jedes Commit, das Sie möchten bearbeitenGit lässt dich in die Schale fallen. Wenn Sie in der Shell sind:

    1. Ändern Sie den Commit auf beliebige Weise.
    2. git commit --amend
    3. git rebase --continue

Der größte Teil dieser Sequenz wird Ihnen durch die Ausgabe der verschiedenen Befehle erklärt, während Sie fortfahren. Es ist sehr einfach, Sie müssen es sich nicht merken - denken Sie daran git rebase --interactive lässt Sie Commits korrigieren, egal wie lange sie her waren.


Beachten Sie, dass Sie Commits, die Sie bereits übertragen haben, nicht ändern möchten. Oder vielleicht tust du das, aber in diesem Fall wirst du sehr darauf achten müssen, mit all denen zu kommunizieren, die deine Commits gezogen haben und auf ihnen gearbeitet haben. Wie kann ich wiederherstellen / resynchronisieren, nachdem jemand eine Rebase oder einen Reset auf eine veröffentlichte Zweigstelle geschoben hat?


2294
2017-08-15 21:20



Um das vorherige Commit zu ändern, nehmen Sie die gewünschten Änderungen vor und führen Sie diese Änderungen durch. Führen Sie anschließend die Änderungen aus

git commit --amend

Dadurch wird eine Datei in Ihrem Texteditor geöffnet, die Ihre neue Commit-Nachricht darstellt. Es beginnt mit dem Text aus Ihrer alten Commit-Nachricht gefüllt. Ändern Sie die Commit-Nachricht wie gewünscht, speichern Sie die Datei und beenden Sie den Editor, um den Vorgang abzuschließen.

Um das vorherige Commit zu ändern und die gleiche Protokollnachricht zu behalten, führen Sie

git commit --amend -C HEAD

Um das vorherige Commit zu beheben, indem Sie es vollständig entfernen, führen Sie es aus

git reset --hard HEAD^

Wenn Sie mehr als eine Commit-Nachricht bearbeiten möchten, führen Sie sie aus

git rebase -i HEAD~commit_count

(Ersetzen commit_count mit der Anzahl der Commits, die Sie bearbeiten möchten.) Dieser Befehl startet Ihren Editor. Markieren Sie das erste Commit (dasjenige, das Sie ändern möchten) als "Bearbeiten" statt "Auswählen", speichern Sie dann und beenden Sie Ihren Editor. Nehmen Sie die Änderung vor, die Sie festschreiben möchten, und führen Sie sie aus

git commit --amend
git rebase --continue

Hinweis: Sie können "Die gewünschte Änderung vornehmen" auch über den Editor öffnen, der von geöffnet wurde git commit --amend


749
2018-06-06 21:16



Wie bereits erwähnt, git commit --amend ist die Möglichkeit, das letzte Commit zu überschreiben. Eine Anmerkung: wenn Sie auch möchten überschreiben Sie die Dateien, wäre der Befehl

git commit -a --amend -m "My new commit message"

381
2017-09-01 20:35



Sie können auch Git verwenden filter-branch dafür.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Es ist nicht so einfach wie ein Trivial git commit --amend, aber es ist besonders nützlich, wenn Sie nach Ihrer fehlerhaften Commit-Nachricht bereits einige Zusammenführungen haben.

Beachten Sie, dass dies versucht, JEDES Commit zwischen den beiden zu überschreiben HEAD und die fehlerhafte Commit, also sollten Sie Ihre wählen msg-filter Befehl sehr weise ;-)


346
2018-01-10 14:23



Ich bevorzuge diesen Weg.

git commit --amend -c <commit ID>

Andernfalls wird ein neues Commit mit einer neuen Commit-ID durchgeführt


306
2017-11-08 03:51