为什么git不会问如何合并一些文件?

时间:2014-10-28 08:48:30

标签: git merge

我正在尝试合并两个分支。假设我有三个文件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!如果我比较两个分支,它会正确显示所有差异。

2 个答案:

答案 0 :(得分:0)

Git正如你所说的那样工作。

假设我的每个内容都包含A BC个文件。您可以按照以下命令测试行为:

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

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


评论扩大案例:

第一行包含A的文件AAAAAAB BBBBBBBC CCCCCC

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

分支到branch1

git checkout -b branch1

A的第一行替换为DDDDDDDDDD添加到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)