我想合并两个分支。假设我有三个文件A,B和C. 在分支主文件中,我有三个文件A,B和C.并且在分支'新'中我有A和C,并且我删除了B。另外C和A不同于C和A在'主'中。为什么git不问如何合并一些文件?
现在我正在将'master'和'new'合并在一起,而git所做的是将'C'的'master'版本替换为'new'版本的C,它保留了B(我实际上想要删除)要求我手动合并A.发生了什么事? 我以为它会问我所有的变化!
但是!如果我比较两个分支,它会正确显示所有的差异。
我想合并两个分支。假设我有三个文件A,B和C. 在分支主文件中,我有三个文件A,B和C.并且在分支'新'中我有A和C,并且我删除了B。另外C和A不同于C和A在'主'中。为什么git不问如何合并一些文件?
现在我正在将'master'和'new'合并在一起,而git所做的是将'C'的'master'版本替换为'new'版本的C,它保留了B(我实际上想要删除)要求我手动合并A.发生了什么事? 我以为它会问我所有的变化!
但是!如果我比较两个分支,它会正确显示所有的差异。
Git正在按照您所说的要求工作。
比方说,我有他们的每个内容A
B
和C
文件。您可以测试行为以下命令:
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
如果您在master
和branch1
中进行了更改,则会出现冲突。
从注释扩展情况:
你有文件,其中包含AAAAAA
在第一行,B
A
与BBBBBBB
和C
与CCCCCC
。
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"
回到第二行添加到DDDDD
master
git checkout master
替换的A
与EEEEEE
(从而制备冲突)的第一行 一个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>
提交它不是一个真正的答案,但我不能评论你的问题......我将编辑这篇文章关于你的回答
您应该提供该命令的结果:git status
我假设你是在合并的中间,所以你必须解决冲突(选择,如果你想保留B和手动合并A)
关于分支new_graph_lib 您的分支与“origin/new_graph_lib”保持同步。要致力于 的变化: (使用 “git的重置头
是啊...我的第一个问题就是为什么在我的情况下它并没有删除合并中的B?第二个问题是我如何保留'主'版'C'? – user1685095 2014-10-28 09:05:57
已添加扩展用例。希望能帮助到你。 – 2014-10-28 09:27:18
好吧,它有帮助。但是如果我不想手动删除B(而且实际上它是很多文件),而且我不能创建冲突,因为在A的“新”版本中根本没有共同的行。我只是从文件中删除任何东西,并从头开始。 – user1685095 2014-10-28 12:39:19