Stellen wir uns für einen Moment vor, Sie möchten dem HEADCommit etwas hinzufügen , dh "das zweite Commit B" in Ihrem Beispiel.
Das Commit-Popup auf centhält ein verbindliches " aAmend". Durch Drücken dieser Taste werden die bereitgestellten Änderungen am Festschreiben "geändert" HEAD. Da Commits in Git nicht veränderbar sind, wird das alte Commit durch ein neues Commit ersetzt. Ein Puffer mit der alten Festschreibungsnachricht wird geöffnet, sodass Sie ihn ändern können, falls die hinzugefügte Änderung auch eine Anpassung der Nachricht erfordert. Drücken C-c C-cSie wie immer, wenn Sie mit dem Bearbeiten der Nachricht fertig sind. Dies entspricht der Ausführung git commit --amendin der Befehlszeile.
- a Ändern - Fügen Sie die bereitgestellten Änderungen hinzu
HEADund bearbeiten Sie die Commit-Nachricht
Da es häufig vorkommt, dass Sie nur die Änderung oder die Meldung anpassen müssen , bietet Magit zwei zusätzliche Varianten an:
- e Erweitern - Fügen Sie die bereitgestellten Änderungen hinzu,
HEADohne die Festschreibungsnachricht zu bearbeiten
- w Reword - Ändern Sie die Nachricht von,
HEADohne die bereitgestellten Änderungen hinzuzufügen
Wenn Sie ein Commit bearbeiten möchten, das nicht vorhanden ist HEAD, funktioniert das oben beschriebene nicht. Diese Befehle "modifizieren" (dh ersetzen) immer das HEADCommit. Git bietet keinen einzigen Befehl zum Ändern eines Commits an, außer HEADdies ist etwas komplizierter.
Magit bietet einen solchen Befehl an, aber da es Situationen gibt, in denen dies in mehreren Schritten vorzuziehen ist, werden wir diesen zuerst erörtern.
Das Ändern eines anderen Commits als HEADkann in drei Schritte unterteilt werden:
- Machen Sie vorübergehend das andere commit (
A) HEAD.
- Ändern Sie die
HEAD(wie oben beschrieben), was zu einem Commit führt A'.
- Weisen Sie Git an, die folgenden Commits erneut anzuwenden
A, jedoch zusätzlich A'.
Dies kann über eine interaktive Rebase erfolgen. Geben Sie rdas Fütterungsmaterial Popup zu zeigen. Geben Sie dann mden „bearbeiten ein commit“ aufzurufen rebase Variante. Ein Puffer mit den letzten Commits wird angezeigt. Bewegen Sie sich zu dem Commit, das Sie ändern möchten, und geben C-c C-cSie es ein, um es auszuwählen. Git führt dann einen Rücklauf des Verlaufs zu diesem Commit durch und zeigt Informationen über den laufenden Rücklauf im Statuspuffer an.
Ändern Sie HEADwie oben beschrieben. Dann sag Git, dass du fertig bist, indem du tippst r r. Wenn A'und BKonflikt dann rebase hält an , Bund Sie haben , um den Konflikt zu lösen. Nachdem Sie dies getan haben, drücken Sie, r rum fortzufahren.
Wenn Sie wissen, dass Ihre Änderungen zu AKonflikten führen B, gehen Sie wie oben beschrieben vor, andernfalls verwenden Sie den folgenden Ansatz.
Git erlaubt das Erstellen von "Fixup Commits" mit git commit --fixup A. Dadurch wird ein neues Commit erstellt, in dem Änderungen aufgezeichnet werden, die "in einem anderen Commit hätten vorgenommen werden müssen". Dieses Commit wird das Neue HEAD. Es gibt auch eine --squashVariante. Informationen zu den Unterschieden finden Sie auf der git-commitManpage.
Um das AFestschreiben und das neue Festschreiben tatsächlich zu kombinieren A'und dann erneut Bdarauf anzuwenden, müssen Sie rebase verwenden. Magit bietet dazu einen komfortablen Befehl r f.
Der Hauptunterschied zum obigen Ansatz besteht darin, dass wir hier zuerst ein neues Commit erstellen und es dann neu definieren, um es mit dem "Ziel" zu kombinieren und erneut anzuwenden B. Oben haben wir mit dem Umbasieren statt mit dem Festschreiben begonnen.
In Magit sind sowohl die --fixupals auch die --squashVarianten über das Commit-Popup auf fund verfügbar s. Magit bietet aber auch "sofortige" Varianten der Fixup- und Squash-Befehle für Fund an S. Diese Varianten erstellen ein neues Commit wie die "non-instant" -Varianten, kombinieren dann jedoch sofort das Fixup-Commit mit dem Ziel-Commit unter Verwendung von rebase, ohne dass Sie einen anderen Befehl aufrufen müssen.
"Instant fixup" ( c F) ist im Wesentlichen dasselbe wie "extend HEAD" ( c e), außer dass es für jedes Commit funktioniert, nicht nur HEAD.
Weitere Lektüre: