Git合并不';不要第二次合并文件

Git合并不';不要第二次合并文件,git,merge,branch,branching-and-merging,Git,Merge,Branch,Branching And Merging,我有一个主分支和一些东西,比如说文件自述。我还有一个dev分支,master的子级,还有一些额外的文件,比如文件README2。我做了以下工作: git merge dev 从master获取文件README2并合并到master中。现在我删除它: git rm README2 现在,当我再次合并dev时,我希望将README2文件合并到master中,因为它不再位于master中。但Git报告说,没有任何更改,也没有要合并的内容。这确实适合我,但我不明白这是怎么回事,因为此时branch

我有一个主分支和一些东西,比如说文件自述。我还有一个dev分支,master的子级,还有一些额外的文件,比如文件README2。我做了以下工作:

git merge dev
从master获取文件README2并合并到master中。现在我删除它:

git rm README2

现在,当我再次合并dev时,我希望将README2文件合并到master中,因为它不再位于master中。但Git报告说,没有任何更改,也没有要合并的内容。这确实适合我,但我不明白这是怎么回事,因为此时branch dev显然有README2文件,而master没有。

这种情况发生的原因是,从git跟踪系统中删除README2文件,它将忽略您将来可能对其所做的任何更改,这些更改还可能涉及包含该文件的合并。如果您使用
git status
,您可能会在那里看到一个未跟踪的文件


我希望这是有帮助的,如果您想在提交中实际删除文件而不是执行
git rm README2
,您可以简单地删除文件,git会将其注册为文件删除,而不是取消摇摆命令。

您误解了
git merge
的功能。它在提交树级别工作,而不是在单个文件级别

假设您从这里开始,在两个分支上有两个提交
A
B

master--A#此文件没有README2文件
dev-----B#这已经读到了2
然后将
dev
分支合并到
master

master--A--+--C
/
开发人员------B--/
这将在主分支中创建一个新的合并提交(
C
C
有其父代的历史,
A
B
。这是将
README2
引入
master
分支的地方

稍后,您从
master
分支中删除了
README2
。此文件删除将在
master
分支上生成新的提交(
D

master--A--+--C--D
/
开发人员------B--/
新提交的
D
具有
master
dev
的历史记录(由于在
C
处合并),加上您删除了文件
README2
。假设您也对
dev
(下面的提交
E
)进行了更改,但它不涉及文件
README2

master--A--+--C--D
/
开发人员----B---+-E
现在您将
dev
再次合并到master中

master--A--+--C--D--+--F
/              /
开发人员----B---+-E--------/
您有一个新的合并提交
F
,它的历史记录来自
D
E
。主分支不会再次获取文件
README2
,因为该文件已在
master
(在
D
)中删除,并且新的
dev
commit
E
不包含对
README2
的更新


此时,如果修改
dev
分支上的文件
README2
,然后尝试将其合并回
master
,则最终会出现合并冲突。它看起来像这样

$git合并开发
冲突(修改/删除):README2在HEAD中删除,在dev中修改。README2的dev版本保留在树中。
自动合并失败;修复冲突,然后提交结果。
正如案文所示,两国之间存在冲突。在一个分支中,文件已被修改,但在另一个分支中,文件已被删除。git不确定该接受哪一个,于是放弃了,并要求您告诉它下一步该做什么