2012-01-20 217 views
1

我有一個git分支,我一直致力於使用提交代碼調用feature1。我意識到我希望將一些新功能拆分爲一個名爲feature2的新分支,並從feature1中刪除該功能以保持功能之間的明確分離。刪除後合併git分支

我一直在試圖找出一個很好的方法來實現這個功能,以便我稍後可以將feature2和/或feature1帶入主設備。

我想到的解決方案是基於feature1創建feature2分支,然後從feature1中刪除feature2相關的代碼。我這樣做的擔心是,如果feature2先合併到master中,然後feature1合併後,「刪除」是否會從master中移除feature2代碼?

有沒有更好的方法我應該這樣做?

+1

如果feature1和feature2的代碼在單獨的提交中(或者甚至可能是單獨的文件),我認爲rebasing可能是要走的路。不幸的是,我不太瞭解如何使用「rebase」爲您提供具體的解決方案。 –

+0

如果您對feature1和feature2進行了單獨提交,只需分支並執行「rebase -i master」(交互式轉置)。然後在feature2分支中忽略關於feature1的提交,反之亦然。 HTTP://book.git-scm。com/4_interactive_rebasing.html – lbolla

+0

請停止編輯問題和答案。謝謝。 –

回答

2

試試這個:

git branch original-tip 
git branch feature2 
git checkout -b feature1 

git rebase -i HEAD~5 # replace 5 with the number of commits to go back 
         # before any of this work occurred 

現在標記所有提交與「編輯」,並刪除不具有相關的工作特點1.保存並退出任何線路。現在您將被提示編輯這些提交。添加你需要的任何東西,然後登臺,然後

git rebase --continue 

重複這個過程,直到rebase完成。

git checkout feature2 

對feature2應用與之前相同的步驟。在此之後,您將擁有2個獨立的功能和一個分支,指向您將它們放在一起的位置。

要添加:

還有另一種方法來完成此操作。

git checkout -b start HEAD~5 
git checkout -b feature1 
git branch feature2 

現在使用結賬和或櫻桃採摘製作分支。這是獲取每次提交所需的確切樹的更人工方式。感興趣的是添加和重置的補丁選項。另外這個語法git的結帳是在這種情況下非常有用:

git checkout <some sha1> -- some files 

的Git讓你完成你想要什麼的許多方面。根據您的提交的獨立程度,您可以選擇一種方法而不是另一種方法。

+0

聽起來不錯。我會試試看。 –

0

最好是在添加feature2相關代碼的任何部分之前找到最後一次提交,並以feature2分支爲基礎。

如果所有f2編輯都是在f1之後添加的,一切都很好,您只需將feature1重置回此提交。否則(如果部分編輯是混合的),您可以選擇創建兩個具有相同根的新分支(pure_f1,pure_f2),然後通過從當前的feature1個別提交來構建每個分支。