git merge不会删除文件

时间:2013-08-13 03:02:47

标签: git msysgit

我尝试合并两个分支,将br2说成br1br1 git merge br2)。 1.txt是两个分支上都存在的文件。在br2中,此文件已移至另一个目录1.txt,现在位于sub/1.txt。合并完成后,我在1.txtbr11.txt中有两个文件sub/1.txt,这很奇怪。

如果我应用提交已移动1.txt文件并将cherry-pick文件正确移动到子目录。

为什么在合并期间它没有被移动(但被复制)到子目录中?

$ git --version
git version 1.8.1.1

2 个答案:

答案 0 :(得分:1)

也许你没有明确删除br2上的文件?

移动文件的常用方法是使用git mv。那将是:

git checkout br2
git mv 1.txt sub # Moving 1.txt to sub/ using git mv command
git commit

git checkout br1 
git merge br2    # You should see now the file 1.txt only on sub/

如果你做了类似的东西,一种可能性是由于某种原因,1.txt是通过br1而不是br2上的某个提交在顶层文件夹上“引入”的,因此在这些分支之间进行合并会保留它们两者。

如果您在分支上发布git log <hash-of-commit-where-you-moved-the-file> --stat --pretty=oneline --abbrev-commit和/或git log 1.txt,那么我可以更好地理解。

答案 1 :(得分:1)

我找到了答案。合并基础存在问题。基本上从头部到merge-base的diff不包含文件删除,所以这就是为什么git删除了带有cherry pick的文件而没有使用merge。