如何自动检测 Git 提交或变基是否包含类似“<<<<< HEAD”的内容?

How to auto-detect if a Git commit or rebase contains something like "<<<<< HEAD"?

我最近犯了一个愚蠢的错误,提交了包含 Git 变基消息的代码,例如 <<<<< HEAD

我相信这是因为我 git add . ; git rebase --continue 没有仔细检查文件是否包含这些消息。

我想知道是否有任何方法可以防止这种情况发生?我的意思是,通常 Git 会在合并时警告您有这样的消息。但是在你 git add . 我相信 Git 然后将这些视为我代码的一部分?

我检查了一个名为 overcommit 的著名工具 (bridage/overcommit) 但似乎没有这样的检查。

编辑: 在 overcommit 中,有这个 PreCommit/MergeConflicts 钩子,它只检查我的手动提交 git commit, 但如果它发生在变基期间,则不会触发。

希望我能找到一个真正的方法来检测这个。

当存在冲突时,<<<<< HEAD 标记会添加到文件中。

因此,当您重新调整分支并 git 发现一些冲突的更改时,它会用标签标记它

<<<<<<< HEAD 
conflicting changes in HEAD 
============ 
conflicting changes in current commit 
>>>>>>> commit SHA1

只要有冲突,git bash 就会通过暂停 rebase 并显示确切的提交编号来提供指示。您可以手动解决冲突,也可以通过像 kdiff3 这样的合并工具来解决冲突。然后你可以做 git rebase --continue 来继续变基。

我们来看一个例子

上面的例子有以下几点

  1. git bash 在将 branch1 变基到 master 时检测到冲突
  2. git 提供帮助,可能是下一步
  3. git 暂停变基并显示变基暂停的点。

这些清楚地表明您的文件标有冲突标签。

这是此时的文件

所以你必须去文件,找到标记的标签,删除或添加行,保存文件,git 添加它并键入 git rebase --continue 来解决。

在您的情况下,您可能不小心离开了 <<<<<<< HEAD 标记并继续进行变基。

要避免这种情况,最好的方法是使用像 kdiff3 这样的合并工具。你可以在这里找到步骤 http://jebaird.com/2013/07/08/setting-up-kdiff3-as-the-default-merge-tool-for-git-on-windows.html

安装并配置好kdiff3后,只要在bash中输入git mergetool即可打开kdiff3,只要有冲突,只需选择您想要的部分即可解决冲突。 kdiff3 还提供了只需单击一个按钮即可跳转到冲突行的功能。

希望对您有所帮助