【发布时间】:2024-01-10 22:22:02
【问题描述】:
我目前正在研究 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,因此您可以自己尝试合并。我移动函数的提交位于主题分支中。在分支merge_here 的 HEAD 的 master 中更改了相同函数的提交。在 master 中还有一个额外的提交,我在其中使用了其他一些合并技术,对于这个问题你应该忽略它。
【问题讨论】:
标签: git git-merge git-branch