Collapse eine Gruppe von Commits in One auf Git
Habe ich die Gewohnheit eine große Anzahl von kleinen begeht, und ich bin in Ordnung mit ihm. Ich würde aber gern, von Zeit zu Zeit, machen Sie ein paar jener linearen begeht und Zusammenbruch Sie zusammen, als nur einen commit mit der Fähigkeit zu schreiben ein neues commit-Nachricht.
Ich habe in der Dokumentation aber schien ein wenig zu kryptisch für mich. Hat jemand weiß, wie das geht?
InformationsquelleAutor der Frage Rodrogo | 2011-07-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angenommen, Sie möchten, zu schreiben, die Geschichte von dem Baum zurück, bis (aber nicht einschließlich) zu Begehen
a739b0d
.Sicher sein, zu Lesen, auf interactive Rebase ersten.
InformationsquelleAutor der Antwort yfeldblum
Vorausgesetzt, Sie kümmern sich nicht um die Erhaltung aller vorhandenen commit-Nachrichten, gibt es eine nette (und schnelle) git Rezept, das Sie verwenden können. Erstens, stellen Sie sicher, dass Ihr Zweig ausgecheckt:
Für Sicherheit, lässt den tag die aktuelle Begehen.
Weiter, bewegen Sie den Zweig fahren Sie zurück zu Ihrer letzten guten commit (ohne änderung der Arbeitsbereichs-oder index). EDIT: Die Letzte gute commit dem letzten commit auf Ihre Branche, die Sie behalten möchten.
Mit
git status
werden Sie feststellen, dass alle änderungen auf dem Zweig sind nun inszeniert. Alles, was noch zu tun ist ...Diese Methode ist ideal für die Konsolidierung von langen, gewundenen, git Geschichten und knorrigen verschmilzt. Plus, es gibt keine merge/rebase Konflikte zu lösen!
Nun, wenn Sie brauchen, um behalten Ihre vorhandenen commit-Nachrichten oder tun etwas schicker als die oben genannten können, Sie wollen zu verwenden
git rebase --interactive
.Lösung abgeleitet aus: http://makandracards.com/makandra/527-squash-several-git-commits-into-a-single-commit
Referenz: http://git-scm.com/docs/git-reset
Referenz: http://git-scm.com/docs/git-rebase
InformationsquelleAutor der Antwort Ben Amos
Verwenden Sie den Befehl
git rebase -i <commit>
wo<commit>
ist das SKH für die Letzte stabile Begehen.Dadurch werden Sie auf Ihren editor, wo Sie können, ersetzen Sie das Etikett
pick
neben jeder Begehen, da die<commit>
Sie als argument zu Ihren interaktiven rebase-Befehl. Auf den Befehl, den Sie starten möchten kollabieren zu ersetzenpick
mitreword
und für jeden commit danach, die Sie wünschen, zu kollabieren, ersetzenpick
mitfixup
. Speichern Sie, und Sie werden dann erlaubt werden, um eine neue commit-Nachricht.InformationsquelleAutor der Antwort kevmo
Können Sie squash, die eine beliebige Anzahl von commits zu einem einzigen mit
InformationsquelleAutor der Antwort Matt Ball