LiK*_*Kao 11 git git-merge git-branch
我目前正在研究git的很多内容跟踪功能.很高兴知道git允许我找出已经从一个文件移动到另一个文件的代码,但是我想知道在合并中进行冲突解决时这个功能是如何可用的.
这是场景:
我有两个文件hello.cc并bye.cc创建.我启动一个分支topic并将一些代码移动hello.cc到bye.cc.如果我现在这样做,git blame -C bye.cc我可以看到这段代码最初来自hello.cc哪个很好知道.但是现在我切换到没有移动内容的原始分支,并更改了hello.cc在另一个提交中移动的部分中的一些代码.如果我现在这样做,git merge topic我会发生冲突hello.cc.但是,除非我使用diff3样式(我通常会使用它),但我只能看到此方法已从hello.cc其他分支中删除,但后来没有更改过.什么是好的也会发生冲突,bye.cc因为有必要检查是否必须将其他分支的更改重新应用到代码中.这有点可能吗?
我知道我可以手动弄清楚,代码已被移动了git blame --reverse -C topic....然而,对于一个我花了很长时间来弄清楚这种可能性,其他大多数人可能都不知道它.第二,我很懒,可能会忘记代码可能已被移动.此外,当代码被移动到多个文件时,我不确定这是否有效.
您可以通过什么方式保持这种情况尽可能安全?
编辑:
我刚刚发现,它git blame --reverse -C hello.cc $(git merge-base HEAD topic)..topic也可以找出内容的移动位置.如果我正确理解git,这可能更快,因为它不会完整搜索完整存储库中的内容.
编辑:
我上传了我用来玩github的存储库,所以你可以自己尝试合并.我移动函数的提交位于主题分支中.在分支的HEAD中在master中更改相同函数的提交merge_here.在master中有一个额外的提交,我正在玩其他一些合并技术,你应该忽略这个问题.
我担心git不可能在合并中自动识别移动的代码并产生冲突等,除非这些是重命名的整个文件.
这里已经讨论过这个主题,比如git如何处理合并到另一个文件的代码?和git merge:将更改应用于移动到其他文件的代码.