2017-01-26 2 views
0

Es schien einfach Ihre Commits zu quetschen, wenn diese Ihr jüngeren (Squash my last X commits together using Git)Wie Sie Ihre Commits zerquetschen, wenn sie nicht Ihre jüngere seine

Aber was ist, wenn ich ein paar Commits meines Repo zerquetschen will, die nicht die letzten, sagen HEAD~3 zu HEAD~6.

Gibt es eine Möglichkeit, dies zu tun?

+0

die Antwort ist genau das gleiche wie in der Frage, die Sie –

+0

angeben Sie haben Recht @ChrisMaes, nicht realisiert, danke – vaskort

Antwort

2

Dies kann, indem Sie ein interaktives Fütterungsmaterial erfolgen.

Wenn Sie Zweig haben master bei A, begehen und dann erstellt verzweigen Sie my-branch mit begeht B, C, D, E und F. Sie möchten die Commits B, C und in B' zerlegen.

stellen Sie sicher, Ihren aktueller Zweig ist my-branch, und starten Sie ein interaktives Fütterungsmaterial:

git rebase -i master 

Dies wird Ihren Editor mit der Liste der Commits öffnen, die auf gehandelt werden. Jede Zeile repräsentiert einen Commit, und das erste Wort in dieser Zeile gibt den Befehl an, der bei diesem Commit ausgeführt werden soll. Belassen Sie das erste Festschreiben (B) als , und ändern Sie die Befehle für die nächsten beiden Festschreibungen (C und) in squash. Speichern und schließen Sie den Editor.

Nach git beendet Verarbeitung B verpflichtet, C und D ein neuer Editor mit einer Commit-Nachricht für das neue begehen B' eröffnen wird. Dies wird eine Kombination der Commit-Nachrichten von den ursprünglichen Commits enthalten, aber Sie können es zu dem ändern, was Sie möchten. Sobald die Commit-Nachricht wie gewünscht ist, speichern und schließen Sie den Editor.

Sobald git hat die Verarbeitung der Rest der Commits auf Zweig fertig my-branch, verpflichtet auf my-branch wird B', E und F sein.

Beachten Sie, dass Sie eine Rebase nur ausführen sollten, wenn Sie Ihre Commits nicht gedrängt haben. Rebasing verändert die Hashes Ihrer Commits, was zu Problemen führen kann, wenn jemand anderes die ursprünglichen Commits bereits gezogen hat.

+0

das war sauber Mate, danke – vaskort

0

Wenn Sie den Zweig nicht veröffentlicht haben, können Sie den Verlauf ohne Nebeneffekt neu schreiben.

Angenommen, die Geschichte ist A-B-C-D-E-F-G-H-I und das Ziel ist Squash C-D-E-F-G.

git checkout -b squash_branch G 
git reset C --soft 
git commit 
git cherry-pick H I 

Die neue Geschichte wird A-B-S-H'-I' sein.

1
git rebase -i HEAD~6 

Dann in dem interaktiven Editor setzen squash vor den Commits Sie wollen die anderen als pick Squash und verlassen (Sie s abkürzen kann).

Beispiel:

pick 043af87 message 
s 8c0fa0e message 
s b6c7116 message 
pick c5d91a3 message 
pick f20898f message 
pick edcbad2 message