Ich habe einen Zweig 'firstproject' mit 2 Commits. Ich möchte diese Commits loswerden und sie als ein einziges Commit erscheinen lassen.
Der Befehl git merge --squash
klingt vielversprechend, aber wenn ich git merge --squash
mein Terminal starte, werden nur Optionen für den Befehl angezeigt. Was ist der richtige Befehl?
Commit 1:
Added 'homepage.html'
Added 'contacts.html'
Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'
Antworten:
Sie möchten
git rebase -i
eine interaktive Rebase durchführen .Wenn Sie sich derzeit in Ihrem "Commit 1" befinden und das Commit, das Sie zusammenführen möchten, "Commit 2", das vorherige Commit ist, das Sie ausführen können
git rebase -i HEAD~2
, wird ein Editor erstellt, in dem alle Commits aufgelistet sind, die die Rebase durchlaufen wird. Sie sollten zwei Zeilen sehen, die mit "pick" beginnen. Um mit dem Quetschen fortzufahren, ändern Sie das erste Wort der zweiten Zeile von "auswählen" in "quetschen". Speichern Sie dann Ihre Datei und beenden Sie sie. Git wird Ihr erstes Commit in Ihr vorletztes Commit zerquetschen.Beachten Sie, dass dieser Prozess den Verlauf Ihrer Niederlassung neu schreibt. Wenn Sie Ihren Code irgendwohin verschieben, müssen Sie
git push -f
und jeder, der Ihren Code teilt, muss durch einige Rahmen springen, um Ihre Änderungen abzurufen.Beachten Sie, dass sich der Prozess geringfügig unterscheidet , wenn die beiden fraglichen Commits nicht die letzten beiden Commits in der Verzweigung sind.
quelle
Then write your file, and quit
? Ich verwende Android Studio Terminal, die Git-Konsole selbst oder sogar die Git-Konsole mit der SourceTree-Software. Aber wie kann man speichern und beenden?Faule einfache Version für Vergessliche wie mich:
git rebase -i HEAD~3
oder wie viele Commits statt 3.Drehen Sie dies
das mögen
und führen Sie eine Aktion aus, bei der Sie
esc
dannenter
drücken, um die Änderungen zu speichern. [1]Wenn der nächste Bildschirm angezeigt wird, entfernen Sie diese Müllzeilen [2], erstellen Sie eine neue Festschreibungsnachricht oder ähnliches und führen Sie dieselbe
escape
enter
Aktion aus. [1]Wowee, du hast weniger Commits. Oder du hast einfach alles kaputt gemacht.
[1] - oder was auch immer mit Ihrer Git-Konfiguration funktioniert. Dies ist nur eine Sequenz, die angesichts meines Setups effizient ist.
[2] - Sie werden einige Dinge wie
# this is your n'th commit
ein paar Mal sehen, wobei Ihre ursprünglichen Commits direkt unter dieser Nachricht stehen. Sie möchten diese Zeilen entfernen und eine Festschreibungsnachricht erstellen, die die Absichten der n Festschreibungen widerspiegelt, die Sie zu 1 kombinieren.quelle
s
hier für Squash steht. Um das Commit zu verwenden, verschmelzen Sie aber mit dem vorherigen Commit2
Commits und kombinieren möchten die gleiche2
begehen, müssen Sie laufengit reset --soft HEAD~
undgit commit --amend
.git rebase -i HEAD~<quantity of your commits>
(dhgit rebase -i HEAD~5
)txt
Ändern Sie in der geöffneten Datei daspick
Schlüsselwortsquash
für alle Commits mit Ausnahme des ersten Commits (das sich oben befindet). Als erstes ändern Sie es inreword
(was bedeutet, dass Sie im nächsten Schritt einen neuen Kommentar für dieses Commit abgeben) und klicken Sie auf SPEICHERN! Wenn in vim, drücken Sieesc
und speichern Sie durch Eingabewq!
und drücken Sie die Eingabetaste.Erledigt
quelle