2017-03-02 178 views
4

我最近犯了一个愚蠢的错误,提交包含Git rebase消息的代码,类似<<<<< HEAD如何自动检测Git提交或rebase是否包含“<<<<< HEAD”之类的内容?

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

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

我检查了一个叫overcommit的着名工具(bridage/overcommit) 但似乎没有这种检查。

编辑:在过量使用,有这个预提交/ MergeConflicts钩,只​​检查我的手册由git commit承诺,但如果它衍合过程中会发生,也不会触发。

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

+0

我只是简单地看着为过量使用的文档,并看到了[MergeConflicts](https://github.com/brigade/overcommit/blob/master/lib/overcommit/hook/pre_commit /merge_conflicts.rb)预先提交钩子。这不是你想要的吗? – Hasturkun

+0

是的,我确实启用了它。但是这发生在rebase/merge操作中,所以预先提交钩子没有被触发(至少没有警告)。 –

回答

2

<<<<< HEAD mark在存在冲突时被添加到文件中。

所以,当你重订一个分支和Git发现一些冲突更改它的标签,标志着它

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

每当有冲突的Git的bash通过暂停底垫和显示的确切承诺数提供了一个指示。您可以手动解决冲突,也可以通过像kdiff3这样的mergetool来解决冲突。然后你可以做git rebase --continue继续rebase。

让我们来看一个例子

enter image description here

上面的例子有以下点

  1. 的Git的bash检测到冲突而重订BRANCH1到主
  2. ,Git提供了帮助,希望可能是下一步
  3. git暂停rebase并显示暂停rebase的时间点。

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

这里是在这个文件指出

enter image description here

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

就你而言,你可能意外地遗留了<<<<<<< HEAD标记并继续使用rebase。

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

的步骤安装并配置kdiff3后,你只需要类型git mergetool在bash打开kdiff3,每当有冲突,通过简单地选择你想要的部分解决冲突。 kdiff3还提供了通过点击按钮跳转到冲突线的功能。

希望这有助于

+0

This真棒,我通过手动编辑文件多年来解决所有这些冲突。我搜索了所有的mergetools,发现vimdiff + fugitive.vim非常有用。谢谢您的帮助! –

0

你看过预提交钩子吗?例如,请参阅this链接,例如如何设置一个将拒绝提交测试nocommit的文件

+0

是的,我查看了预先提交的钩子,但我正在寻找在'git rebase'期间检测到它。 –

相关问题