2016-08-01 28 views
1

图Arelease-1.0是很久很久以前交付给客户,而是一个巨大的漏洞最近被发现和修补程序是由在release-1.1并重新交付。在Git中,如何合并文件的(未检出)部分从很久以前分支

现在我想在Fig.B方式从release-1.1合并仅修正错误文件(约10个文件)到分支master,就是release-1.1必须是git的历史master父节点。所以git checkout release-1.1 <file>方式不符合这个目的。

同时,由于c2master至今,有太多不同的文件(近几百个文件不能自动合并),并取消这些合并冲突可能会杀了我的工作....

那么我怎么才能在git中实现这个目的?对不起我的英文不好和糟糕的git技能。^_^

图一:

release-1.0 <--- release-1.1       
     |                
     v               
c1 <--- c2 <--- c3 <--- c4 <--- c5 <--- c6 <--- master 

图B:

release-1.0 <--- release-1.1 <----------------------\ 
     |            |  
     v            |  
c1 <--- c2 <--- c3 <--- c4 <--- c5 <--- c6 <--- c7 <--- master 

回答

1

我看不出有什么办法解决处理潜在的合并冲突,因为该修补程序是在一个更古老的制作分支的版本。

一个选择是樱桃挑修复程序提交,然后选择所有文件的从最新master分支版本的文件,除了对参与修复的10个文件:

git checkout master 
git cherry-pick <SHA-1 release-1.1> 

其中<SHA-1 release 1.1>release-1.1分支中修复程序提交的SHA-1哈希。请记住,您可能会在10个修补程序文件本身中发生冲突。在这种情况下,您应该关注修补程序更改,在所有其他情况下倾向于选择最新的master版本。

+1

非常感谢,我终于在你的帮助下找到了方法:1.'git merge -s our '做出一个假合并,它只把'release-1.1'当作新合并提交主的父节点** 2. git cherry-pick -no-commit '将**从release-1.1修改过来的文件放入当前主文件的索引和工作目录** 3.'git commit --amend' to * *将选定的文件放入主**的合并提交中 – vbem