2010-07-14 75 views
9

當我對前幾次提交的更改進行修復時,我總是連續兩次結束運行rebase。是否可以一步完成這個工作流程?假設我有4個新的提交。我可以重新綁定和壓縮同時提交嗎?

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

我在B中發現一個錯誤,所以我創建了一個分支並修復它。

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

接下來,我跑git rebase --onto fix B D C和d移動到B.

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

最後我跑git rebase --i fix^^看到過去幾年提交和我壓扁B和修復成一個單一的提交。

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

有沒有更快的方法來完成相同的工作流程?我想合併會更容易,但合併對我來說是因爲我使用的git svn需要線性歷史記錄。

+2

也許'fixup'和'autosquash'選項可以在這裏幫助嗎? http://stackoverflow.com/questions/2302736/trimming-git-checkins-squashing-git-history/2302947#2302947 – VonC 2010-07-15 04:15:46

+0

@VonC謝謝,這將至少使這些步驟更快一點。 – 2010-07-15 12:36:08

+0

優秀(一開始)。您可以發佈一個答案,說明這些選項的步驟更快。 – VonC 2010-07-15 12:47:10

回答

5

當交互式底座中的提交列表編輯器出現時,您可以自由地添加,刪除或重新排序提交。這基本上是一種影響即將發生的櫻桃採摘循環的方式(這是rebase歸結爲的)。

+0

ADD部分是我所缺少的。謝謝。 – 2010-12-30 15:54:26

3

您是否知道--squash選項爲git merge

--squash

生產工作樹和索引狀態,就像一個真正的合併發生的事情(除了合併信息),但實際上並沒有作出承諾或移動HEAD,也沒有記錄$GIT_DIR/MERGE_HEAD引起下一個git commit命令來創建一個合併提交。這允許您在當前分支上創建一個單獨的提交,其效果與合併另一個分支相同(或者在章魚的情況下更多)。

+0

+1因爲我不知道--squash。但是,這需要相同數量的步驟。在創建修復程序之後,我需要做git merge --squash,然後git commit在頭部,然後git rebase -i重新排序並將修復程序壓縮到提交的錯誤中。 – 2010-07-14 22:46:14

相關問題