2017-03-02 181 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'期間檢測到它。 –

相關問題