如何自动检测 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
来继续变基。
我们来看一个例子
上面的例子有以下几点
- git bash 在将 branch1 变基到 master 时检测到冲突
- git 提供帮助,可能是下一步
- 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 还提供了只需单击一个按钮即可跳转到冲突行的功能。
希望对您有所帮助
我最近犯了一个愚蠢的错误,提交了包含 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
来继续变基。
我们来看一个例子
上面的例子有以下几点
- git bash 在将 branch1 变基到 master 时检测到冲突
- git 提供帮助,可能是下一步
- 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 还提供了只需单击一个按钮即可跳转到冲突行的功能。
希望对您有所帮助