2015-06-20 92 views
-3

我當時在分支「Feature」工作。
所以我的git樹是:如何在分支中的git中將2個提交合併爲1?

    master 
A<--B<--C<--D<--F<--G 
      |<--E 
       Feature 

我想獲得所有最新的高手在特性分支工作一段時間,所以我所做的:

git checkout Feature 
git rebase master 

在底墊我在一個有合併衝突文件和手動解決衝突期間,我犯了一個錯誤,我後來意識到,而不是在運行之前git rebase --continue
所以我結束了一棵樹如下:

    master  
A<--B<--C<--D<--F<--G<--E 
         Feature 

然後我意識到我的錯誤實際上破壞了E中的構建。
我糾正了我的錯誤(尚未提交)並繼續工作,但我不想在功能中進行2次提交,最終將以主和其中一個提交是一個不好的提交。
此外,我想結束我在Feature中主要分支的一次提交。
所以,如果我有:

    master  
A<--B<--C<--D<--F<--G<--E<--H 
          Feature 

我如何結合E和H成一次提交,這樣,當我做的:

git checkout master 
git rebase feature 

我只有1在我的主人犯? 注意:分支功能是本地功能,如果它很重要,則不會被推送。

+0

也許不相關,但我必須問:**爲什麼?** VCS的缺點是您可以查看誰在什麼時間以及爲什麼執行了什麼操作。如果你有系統地重寫你的歷史,那有什麼意義?爲什麼不使用tarball來管理源代碼?那麼如果有兩個或更多的提交可見,那是因爲有幾個提交...你爲什麼要隱藏這個提交? –

+0

@EliasVanOotegem:由於手動/編輯錯誤,提交的歷史記錄很糟糕,這有什麼意義? – Jim

+0

我寧願有一個錯誤的提交比完全重新發布的修訂歷史記錄...我真的重視一個乾淨的提交日誌 –

回答

3

您可以使用交互式重新組合兩個提交。您需要在第二個選項上使用squash選項。

開始:

git rebase -i HEAD~2 
在編輯器中

,你會看到2號線的順序如下:

pick E's SHA-1 
pick H's SHA-1 

pick E's SHA-1 
squash H's SHA-1 

更換然後關閉編輯器。 Git會選擇E,然後將H與它結合。

系統會提示您提供新的組合提交消息。完成後關閉該編輯器,並且rebase將自行完成。

+0

我應該這樣做,而我在功能分支右側? – Jim

+0

是的,當你在問題的最後一個圖中的功能分支中 –

相關問題