772 Stimmen

Wie kann man alle Git-Commits zu einem zusammenfassen?

Wie drückst du dein gesamtes Repository auf den ersten Commit zusammen?

Ich kann zum ersten Commit neu basieren, aber dann hätte ich 2 Commits. Gibt es eine Möglichkeit, auf den Commit vor dem ersten zu verweisen?

43 Stimmen

@innaM - Es ist der ursprüngliche Commit, der den Git hervorgebracht hat. (Hofft, dass der Humor gut genug durch das Internet übertragen wird).

14 Stimmen

Für diejenigen, die später zu dieser Frage kommen, achten Sie darauf, die modernere Antwort zu verwenden.

1 Stimmen

Verwandt, aber kein Duplikat (--root ist tatsächlich nicht die beste Lösung zum Zusammenfassen aller Commits, wenn es viele davon gibt, die zusammengefasst werden müssen): Kombinieren der ersten beiden Commits eines Git-Repositorys?.

17voto

David Punkte 964

Erstelle ein Backup

git branch backup

Zurücksetzen auf den angegebenen Commit

git reset --soft <#root>

Dann alle Dateien zur Staging-Area hinzufügen

git add .

Commit ohne Aktualisierung der Nachricht

git commit --amend --no-edit

Neuen Branch mit zusammengeführten Commits in das Repository pushen

git push -f

0 Stimmen

Wird dies die vorherigen Commit-Nachrichten beibehalten?

1 Stimmen

@not2qubit nein, dies wird die vorherigen Commit-Nachrichten nicht erhalten. Anstelle von Commit #1, Commit #2, Commit #3 erhältst du alle Änderungen in diesen Commits in einem einzigen Commit #1 verpackt. Commit #1 wird der Commit sein, zu dem du zurückgesetzt hast. git commit --amend --no-edit wird alle Änderungen am aktuellen Commit, der ist, ohne Bearbeitung der Commit-Nachricht bestätigen.

15voto

Frerich Raabe Punkte 85859

Zunächst einmal alle Ihre Commits zu einem einzigen Commit mit git rebase --interactive squashen. Jetzt bleiben Ihnen noch zwei Commits zum Squashen übrig. Lesen Sie dazu eine der folgenden Optionen

9voto

Prabhu P Punkte 129

Sagen wir, Sie haben 3 Commits in Ihrem Branch und er ist bereits auf den Remote-Branch gepusht worden.

Beispiel:

git log -4

Wird Ergebnisse wie folgt anzeigen:

Sie möchten Ihre letzten 3 Commits zu einem Commit zusammenführen und auf den Remote-Branch pushen. Hier sind die Schritte.

git reset --soft 

Jetzt sind alle Commit-Änderungen integriert, aber nicht committet. Überprüfen Sie mit:

git status

Committen Sie alle Änderungen mit einer Nachricht:

git commit -m 'Details angeben'

Drücken Sie den einzelnen Commit gewaltsam auf den Remote-Branch:

git push -f

7voto

dimus Punkte 7742

Mit Veredelungen zerdrücken

Fügen Sie eine Datei .git/info/grafts hinzu, setzen Sie dort den Commit-Hash, den Sie zu Ihrem Root machen möchten

git log wird nun von diesem Commit aus starten

Um es 'echt' zu machen, führen Sie git filter-branch aus

5voto

Ich mache es normalerweise so:

  • Stellen Sie sicher, dass alles festgelegt ist, und notieren Sie die neueste Commit-ID, falls etwas schief geht, oder erstellen Sie einen separaten Branch als Sicherungskopie

  • Führen Sie git reset --soft `git rev-list --max-parents=0 --abbrev-commit HEAD` aus, um Ihren Head auf den ersten Commit zurückzusetzen, lassen Sie jedoch Ihr Index unverändert. Alle Änderungen seit dem ersten Commit werden nun bereit zur Übernahme angezeigt.

  • Führen Sie git commit --amend -m "initial commit" aus, um Ihren Commit auf den ersten Commit zu ändern und die Commit-Nachricht zu ändern, oder wenn Sie die vorhandene Commit-Nachricht beibehalten möchten, können Sie git commit --amend --no-edit ausführen

  • Führen Sie git push -f aus, um Ihre Änderungen zu erzwingen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X