Ein weiterer Weg, um alle Ihre Commits zusammenzufassen, besteht darin, den Index auf master
zurückzusetzen:
Hinweis: Der Standard-Branch-Name von Git ist weiterhin master
ab Git-Version 2.41 (Q3 2023), wie auf der git init
man-Seite zu sehen ist.
Git-Version 2.28 (Q3 2020) führte konfigurierbare Standard-Branch-Namen ein, was bedeutet, dass Ihr Remote-Repository möglicherweise einen anderen Standard-Branch-Namen wie main
verwenden kann. Um die universellsten Beispiele bereitzustellen und Verwirrung zu vermeiden, geht diese Antwort von der Standardkonfiguration von Git aus.
Wenn Sie möchten, dass die folgenden Befehle für jeden Standard-Branch funktionieren, ersetzen Sie master
durch ${defaultBranch}
.
Und definieren Sie defaultBranch=$(git config --get init.defaultBranch || echo main)
.
Zurück zur Lösung: (um alle Ihre Commits zusammenzufassen) setzen Sie den Index auf master
zurück:
git checkout yourBranch
git reset $(git merge-base master $(git branch --show-current))
git add -A
git commit -m "ein Commit auf Ihrem Branch"
Dies ist nicht perfekt, da es voraussetzt, dass Sie wissen, von welchem Branch "yourBranch
" stammt.
Hinweis: Das Auffinden des Ursprungs-Branches ist mit Git nicht einfach/möglich (der visuelle Weg ist oft der einfachste, wie hier gesehen).
Hinweis: git branch --show-current
wurde mit Git 2.22 (Q2 2019) eingeführt.
Oder, wie von Hiroki Osame in den Kommentaren erwähnt:
git switch yourBranch
git reset --soft $(git merge-base master HEAD)
git commit -m "ein Commit auf Ihrem Branch"
- keine Notwendigkeit für
git branch --show-current
, da HEAD bereits eine Referenz auf diesen Branch ist.
- kein Bedarf für
git add -A
, da git reset --soft
nur HEAD verschiebt und den Index unberührt lässt (mit anderen Worten, die Dateien sind bereits "hinzugefügt").
EDIT: Sie müssen git push --force
(oder git push --force-with-lease
) verwenden
Siehe "git push --force-with-lease
vs. --force
"
Karlotcha Hoa fügt in den Kommentaren hinzu:
Für das Zurücksetzen können Sie das Folgende tun
git reset $(git merge-base master $(git rev-parse --abbrev-ref HEAD))
[Das] verwendet automatisch den Branch, auf dem Sie sich gerade befinden.
Und wenn Sie das verwenden, können Sie auch ein Alias verwenden, da der Befehl nicht vom Branch-Namen abhängt.