2016-05-14 150 views
1

我在git中有一個分支,它可以乾淨地應用於master。它包含一個提交了10個功能,這些功能可以乾淨地應用到主人。但我想將這些更改合併到主要功能的基礎上。功能更改不在文件級別(因此一個更改文件可能包含2-3個功能的更改,但它們可以很容易地分開)。但是,對於整個文件內容的任何合併策略都會失敗,因此更像是從文件1合併行10-20,從文件合併行70-80,爲一個特徵合併行100。是否有任何編輯器這將合併大的git提交,將它分成主分支上的小提交

  • 讓我挑線在巨大的承諾
  • 允許我在被拾起線合併成一個小提交到主

- 在>結束它將「在分支上的一個大提交」轉換爲對主服務器的10次提交,功能按功能

是否有任何工具(鏈)可以支持這樣的工作流?

+1

的可能的複製[打破先前提交到多次提交(http://stackoverflow.com/questions/6217156/打破之前提交到多個提交) –

+0

這似乎是非常笨重。工作流程更像是啓動類似kdiff3的操作,選擇第一組更改,提交,重新運行kdiff3(現在更少的更改,選擇更改集合,提交等等...... – Mandragor

回答

2

既然你想零碎合併爲master工作在一個承諾在非masterall-in-one分支,我建議打破了all-in-one提交第一,然後合併一個小的承諾每次向master。這樣,與合併補丁相反,您的Git歷史將能夠跟蹤更改的來源。

有多種方法可以完成此操作。一種方法是從與all-in-one分支相同的起始點創建master的第二個piecemeal分支,將all-in-one合併到piecemeal分支中而不提交任何分階段更改,然後開始將未分解的工作分解爲更小的提交,分解爲piecemeal

要使用視覺幫助將未分離的工作分解爲多個提交,您可以使用git add --patch .來將(或不)將每個當前未分離的代碼「塊」分配給控制檯中的Git索引。

git gui提供了一種圖形化的方式來執行相同的操作:選擇非掛起文件,右鍵點擊文件部分,點擊Stage Hunk For Commit。請參閱http://www.adamfranco.com/2009/01/13/git-tip-of-the-day-stage-hunks/瞭解逐步圖片和更多細節。

+1

開發分支上的提交已經發生。我當然可以創建一個補丁出分支,應用補丁來掌握(清潔),然後使用這種方法....不覺得自然的git工作流程... hmm – Mandragor

+0

對不起,錯過了你'd已經承諾了,我會修改我的答案,你的想法可能是在Git中實現你的目標的最習慣的方式, –

+0

實際上,補丁方法可能會得到改進。我已經詳細說明了如何在更新後的答案中這樣做。 –

0

假設分支就像-A-B並且您想將B分成幾個提交。

git reset A 
git add some_file -p 
git commit 
git add some_file -p 
git commit 
... 

參考:git-add看一看在編輯PATCHES部分,並有嘗試

+0

這種方法的問題在於,您需要跟蹤「在您的腦海中」哪些單個補丁(在多個文件中)屬於一個特徵。這可能是一個智力大師的頭腦的解決方案;)但對於日常業務,我寧願_git gui_解決方案在這裏提出,在那裏我實際上可以瀏覽幾個文件,並撰寫我的承諾 – Mandragor

+0

嗯...也許替換@ ElpieKay的' git用'git gui'添加some_file -p'來得到你想要的,@Mandragor? –

+0

同意Mandragor和Mark。更好的解決方案是儘可能經常地提交git。畢竟,將多個提交合併爲一個比將一個拆分爲幾個更容易。 – ElpieKay