我正在尝试合并两个分支。假设我有三个文件A,B和C. 在分支主文件中,我有三个文件A,B和C.在分支'new'中我有A和C,我删除了B.另外C和A与'master'中的C和A不同。
现在我将'master'与'new'合并,git做的是用'new'版本的C替换'master'版本的C,它保留B(我实际上想要删除)并且它要求我手动合并A.发生了什么事? 我以为它会问我所有的变化!
BUT!如果我比较两个分支,它会正确显示所有差异。
答案 0 :(得分:0)
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到master的合并
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
中进行了更改,则会显示冲突。
评论扩大案例:
第一行包含A
的文件AAAAAA
,B
BBBBBBB
和C
CCCCCC
。
git init
git add A B C
git commit -m "Initial commit"
分支到branch1
git checkout -b branch1
将A
的第一行替换为DDDDD
将DDDDD
添加到C
git rm B
git add A C
git commit -m "branch commit 1"
返回master
git checkout master
将A
的第一行替换为EEEEEE
(从而准备冲突)
在CCCCC
B
行
git add A B
git commit -m "master commit 1"
现在我们执行合并
git merge 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>
进行手动提交
答案 1 :(得分:0)
这不是一个真正的答案,但我无法评论你的问题......我会根据你的回答编辑这篇文章
您应该提供命令的结果:git status
我假设您处于合并的中间,因此您必须解决冲突(选择是否要保留B并手动合并A)