2016-05-14 156 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