2010-07-14 18 views
9

Wenn ich einen Fix für eine Änderung habe, die ein paar Commits früher war, lief ich immer zweimal in Folge Rebase. Ist es möglich, diesen Workflow in einem Schritt durchzuführen? Sagen wir, ich habe 4 neue Commits.Kann ich Commits gleichzeitig rebasen und zerquetschen?

* (master) D 
* C 
* B 
* A 
* Base 

Ich finde einen Fehler in B, also erstelle ich einen Zweig und behebe ihn.

* (master) D 
* C 
| * (fix) Fix. 
|/ 
* B 
* A 
* Base 

Weiter Ich betreibe git rebase --onto fix B D C und D auf B zu bewegen

* (master) D' 
* C' 
* (fix) Fix. 
* B 
* A 
* Base 

Schließlich laufe ich git rebase --i fix^^ die letzten Commits zu sehen und ich Squash B und Fix in einem einzigen begehen.

* (master) D' 
* C' 
* B' 
* A 
* Base 

Gibt es einen schnelleren Weg, um den gleichen Workflow zu erreichen? Ich stelle mir vor, dass das Zusammenführen einfacher wäre, aber das Zusammenführen ist für mich nicht möglich, da ich git svn verwende, das eine lineare Geschichte benötigt.

+2

vielleicht könnten hier die Optionen 'fixup' und' autosquash' helfen? http://stackoverflow.com/questions/2302736/trimming-git-checkins-squashing-git-history/2302947#2302947 – VonC

+0

@VonC Danke, das wird zumindest diese Schritte ein wenig schneller machen. –

+0

ausgezeichnet (für einen Start). Sie könnten eine Antwort veröffentlichen, die veranschaulicht, wie die Schritte mit diesen Optionen schneller sind. – VonC

Antwort

5

Wenn der Editor für die Festschreibliste in einer interaktiven Umbenennung angezeigt wird, können Sie die Zusagen nach Belieben hinzufügen, entfernen oder neu anordnen. Es ist im Grunde ein Weg, um den Rosinenpicker-in-einem-Loop zu beeinflussen, der stattfinden wird (das ist es, worauf Rebase hinausläuft).

+0

Der ADD Teil ist was ich vermisst habe. Vielen Dank. –

3

Ist Ihnen die --squash Option zu git merge bekannt?

--squash

Produzieren des Arbeits Baum und Index-Zustand, als ob eine echte merge (mit Ausnahme der merge Informationen) passiert ist, aber nicht wirklich eine der HEAD machen begehen oder verschieben, noch Rekord $GIT_DIR/MERGE_HEAD die verursachen Nächster Befehl git commit, um einen Zusammenführungs-Commit zu erstellen. Dies ermöglicht es Ihnen, ein einzelnes Commit über dem aktuellen Zweig zu erstellen, dessen Auswirkung dasselbe ist wie das Zusammenführen eines anderen Zweiges (oder mehr im Falle eines Oktopus).

+0

+1, weil ich nicht über --squash wusste. Dies erfordert jedoch die gleiche Anzahl von Schritten. Nachdem ich das Update erstellt habe, müsste ich anstelle von zwei Rebases git merge --squash, dann git commit am Kopf und git rebase -i ausführen, um das Fix in den Commit mit dem Bug zu quadrieren. –

Verwandte Themen