我尝试合并两个分支,将br2
说成br1
(br1
git merge br2
)。 1.txt
是两个分支上都存在的文件。在br2
中,此文件已移至另一个目录1.txt
,现在位于sub/1.txt
。合并完成后,我在1.txt
:br1
和1.txt
中有两个文件sub/1.txt
,这很奇怪。
如果我应用提交已移动1.txt
文件并将cherry-pick
文件正确移动到子目录。
为什么在合并期间它没有被移动(但被复制)到子目录中?
$ git --version
git version 1.8.1.1
答案 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。