当尝试从我们软件的一个较旧版本分支合并到主版本时,我在 Git 1.7.5.4 中遇到了一些非常奇怪的行为。
$ git checkout master
$ git merge 0.1.2.3
[...]
Auto-merging ProjectA/src/main/groovy/com/example/package/Something.groovy
CONFLICT (content): Merge conflict in ProjectA/src/main/groovy/com/example/package/Something.groovy
[...]
Automatic merge failed; fix conflicts and then commit the result.
看着那个文件,我看到了一些非常奇怪的东西:
$ cat ProjectA/src/main/groovy/com/example/package/Something.groovy
<<<<<<< HEAD
[contents of ProjectA/src/main/groovy/com/example/package/Something.groovy]
=======
[contents of ProjectC/src/main/groovy/com/example/something/Different.groovy !!]
>>>>>>> 0.1.2.3
该Something.groovy
文件在另一个分支上不存在。该Different.groovy
文件不再存在于 master 分支上。我本来希望收到关于文件不存在的合并冲突警告。我没想到它会错误地与另一个项目中完全不相关的文件相关联。
知道什么会导致这样的事情吗?我不认为这是哈希冲突,使用git log --raw
and查看文件历史的哈希值git show --raw
。