806 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?

45 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?.

50voto

Logan Punkte 50618

Hier ist, wie ich das gemacht habe, nur für den Fall, dass es für jemand anderen funktioniert:

Denken Sie daran, dass es immer ein Risiko gibt, solche Dinge zu tun, und es ist nie eine schlechte Idee, einen sicheren Zweig zu erstellen, bevor Sie beginnen.

Fange mit dem Einloggen an

git log --oneline

Scrolle zum ersten Commit, kopiere SHA

git reset --soft <#sha#>

Ersetze <#sha#> mit dem aus dem Log kopierten SHA

git status

Stelle sicher, dass alles grün ist, ansonsten führe git add -A aus

git commit --amend

Alle aktuellen Änderungen am aktuellen ersten Commit ändern

Jetzt dieses Branch erzwungen pushen und es wird überschreiben, was da ist.

1 Stimmen

Beachten Sie, dass dies anscheinend die Geschichte umgibt. Du verwaist es, aber es ist immer noch da.

0 Stimmen

Sehr nützliche Antwort ... aber du solltest wissen, dass du nach dem Ändern-Befehl im vim-Editor mit seiner speziellen Syntax landen wirst. ESC, ENTER, :x sind deine Freunde.

48voto

R. Martinho Fernandes Punkte 217895

Ich habe etwas über die Verwendung von Grafts gelesen, aber nie viel darüber untersucht.

Wie auch immer, Sie können die letzten 2 Commits manuell mit etwas Ähnlichem wie diesem zusammenführen:

git reset HEAD~1
git add -A
git commit --amend

39voto

CB Bailey Punkte 693084

Der einfachste Weg ist, das Befehl update-ref zu verwenden, um den aktuellen Branch zu löschen.

Sie können nicht git branch -D verwenden, da es ein Sicherheitsmechanismus hat, der verhindert, dass Sie den aktuellen Branch löschen.

Dies versetzt Sie in den Zustand des 'initial commit', wo Sie mit einem frischen initial commit beginnen können.

git update-ref -d refs/heads/master
git commit -m "Neuer initial commit"

28voto

kyb Punkte 5908

In einer Zeile von 6 Wörtern:

git checkout --orphan new_root_branch  &&  git commit

0 Stimmen

@AlexanderMills, du solltest git help checkout über --orphan lesen

0 Stimmen

Kannst du den Link zu den Dokumenten dazu einfügen, damit jeder, der dies liest, nicht manuell danach suchen muss?

2 Stimmen

Einfach. hier ist es git Hilfe checkout --orphan

20voto

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.

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