2017-07-26 97 views
2

我正在嘗試rebase -i幾次提交,這些提交發生在我的歷史記錄中。說我有這樣的日誌:Git:交互式重定義一系列提交

* 5e32fb0 (HEAD -> master) Add latest feature 
* 106c31a Add new feature 
* 2bdac33 Add great feature 
...100 other commits... 
* 64bd9e7 Add test 3 
* 3e1066e Add test 2 
* 26c612d Add test 1 
* 694bdda Initialize repo 

我想擠壓3個測試提交。在這些情況下,git rebase -i HEAD~106不是很實用。我正在尋找的東西就像git rebase -i 64bd9e7:26c612d

git是否有這種行爲,如果是的話,我該如何使用它?我看過this post,但它沒有回答我的問題。

+2

這是很少建議儘量使到達該早在歷史的變化。記住,任何你在過去改變的東西,也會改變現在:壓扁後的每一次提交被複制到一個新的不同的提交中,以提供這個新的歷史。 – torek

回答

2

爲了擠進這三個提交,你需要對整個重新書寫歷史。也就是說,在那些測試提交之後提交的所有提交哈希都將被修改。在我看來,最直接的做法是:

  1. 創建一個臨時分支和結賬指向64bd9e7
  2. 將三個承諾壓制在一起。
  3. 檢出您的主分支,並在64bd9e7之後立即將其重置爲提交。
  4. 調整基線到你的臨時黨支部
1

只需使用rebase -i並壓扁那些提交。

git rebase -i <main_branch> 
# Now just add `s` in front of all the commits you want to squash 

如果你有很多的提交,我建議你看一看rebase --onto -

git rebase --onto <final_base_commit> <initial_base_commit> <head> 

git rebase --onto 694bdda 64bd9e7 5e32fb0 

注:改寫歷史的是一種先進的操作,所以請小心行事。

Git rebase tutorial

+0

這是唯一的方法嗎?很難瀏覽100多個提交列表,所以我希望找到一個替代方案。 – adc17

+0

檢查我更新的答案。 – hspandher