2014-10-28 46 views
0

我想合并两个分支。假设我有三个文件A,B和C. 在分支主文件中,我有三个文件A,B和C.并且在分支'新'中我有A和C,并且我删除了B。另外C和A不同于C和A在'主'中。为什么git不问如何合并一些文件?

现在我正在将'master'和'new'合并在一起,而git所做的是将'C'的'master'版本替换为'new'版本的C,它保留了B(我实际上想要删除)要求我手动合并A.发生了什么事? 我以为它会问我所有的变化!

但是!如果我比较两个分支,它会正确显示所有的差异。

回答

0

Git正在按照您所说的要求工作。

比方说,我有他们的每个内容ABC文件。您可以测试行为以下命令:

git init 
git add A B C 
git commit -m "Initial commit" 

然后创建分支

git checkout -b branch1 
<edit A, edit C> 
git rm B 
git add A C 
git commit -m "branch commit 1" 

然后执行从BRANCH1合并掌握

git checkout master 
git merge branch1 

在这种情况下,git会快转发您的更改:

Fast-forward 
A | 4 ++-- 
B | 5 ----- 
C | 6 +++--- 
3 files changed, 5 insertions(+), 10 deletions(-) 
delete mode 100644 B 

如果您在masterbranch1中进行了更改,则会出现冲突。


从注释扩展情况:

你有文件,其中包含AAAAAA在第一行,BABBBBBBBCCCCCCC

git init 
git add A B C 
git commit -m "Initial commit" 

分支到branch1

git checkout -b branch1 

DDDDD 更换的A第一线的C

git rm B 
git add A C 
git commit -m "branch commit 1" 

回到第二行添加到DDDDDmaster

git checkout master 

替换的AEEEEEE(从而制备冲突)的第一行 一个CCCCC行添加到B

git add A B 
git commit -m "master commit 1" 

现在我们执行合并

混帐合并BRANCH1

CONFLICT (modify/delete): B deleted in branch1 and modified in HEAD. Version HEAD of B left in tree. 
Auto-merging A 
CONFLICT (content): Merge conflict in A 
Automatic merge failed; fix conflicts and then commit the result. 

B仍然存在。 所以基本上现在你必须决定做什么,现在

git add B # Keeping B 
git rm B # Trashing B 

你需要通过编辑它来解决冲突A。然后

git add A 

为阶段它提交。

如果git status你会看到C已被修改(因为它的目的是与版本控制端起你branch1所做的更改!),但你有机会使用恢复文件到主版本:

git checkout HEAD C 

这种行为可以为其他合并完成时,没有冲突,但你必须强制进行手动与git merge --no-commit <branch>

+0

是啊...我的第一个问题就是为什么在我的情况下它并没有删除合并中的B?第二个问题是我如何保留'主'版'C'? – user1685095 2014-10-28 09:05:57

+0

已添加扩展用例。希望能帮助到你。 – 2014-10-28 09:27:18

+0

好吧,它有帮助。但是如果我不想手动删除B(而且实际上它是很多文件),而且我不能创建冲突,因为在A的“新”版本中根本没有共同的行。我只是从文件中删除任何东西,并从头开始。 – user1685095 2014-10-28 12:39:19

0

提交它不是一个真正的答案,但我不能评论你的问题......我将编辑这篇文章关于你的回答

您应该提供该命令的结果:git status

我假设你是在合并的中间,所以你必须解决冲突(选择,如果你想保留B和手动合并A)

+0

关于分支new_graph_lib 您的分支与“origin/new_graph_lib”保持同步。要致力于 的变化: (使用 “git的重置头 ...” 来unstage) \t新文件:.idea /词典/ michael.xml \t新文件:.idea /示波器/ scope_settings.xml 未追踪的文件: (使用“git add ...”包含将承诺的内容) \t .idea/workspace.xml – user1685095 2014-10-28 12:36:53