2016-01-20 130 views
8

在從origin/base分支合併分支到我的feature分支之後,我必須解決文件Parameter.java上的一個衝突。我啓動了我的Git合併工具,並解決了它。一旦解決了問題,我執行了git commit,並打開Vim,並顯示默認合併提交消息。Git默認合併提交消息不包括衝突

事情是,這個默認提交消息包含衝突列表,但是從#開始,因此它們將在提交消息中被忽略。

Merge remote-tracking branch 'origin/base' into feature 

# Conflicts: 
#  Parameter.java 
# 
# It looks like you may be committing a merge. 
# If this is not correct, please remove the file 
#  .git/MERGE_HEAD 
# and try again. 

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# On branch feature 
# All conflicts fixed but you are still merging. 
# 
# Changes to be committed: 
#  modified: Parameters.java 
#  modified: SpecialParameters.java 
#  modified: Traveller.java 

是否有一些要添加的配置來將這些衝突行自動放入提交消息中?因此,刪除Conflicts部件中衝突文件的#

回答

8

您可以使用prepare-commit-msg鉤子來執行此操作。

複製.git/hooks/prepare-commit-msg.sample.git/hooks/prepare-commit-msg

內心裏卻增加了#向衝突部分的例子:

case "$2,$3" in 
    merge,) 
    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; 

此掛鉤是有道理的,因爲以前的版本是這樣的默認(如在Linux git version 1.7.10.4)。

現在你想要做的恰恰相反:在衝突部分刪除#。事實上,git version 2.6.2.windows.1默認情況下,衝突的部分評論,所以你可以只是prepare-commit-msg更新命令:

/usr/bin/perl -i.bak -ne 's/^#// if /^# Conflicts/ .. /^#\R/; print' "$1" ;; 
+0

'#該鉤子包括三個例子。第一個註釋是合併提交的「衝突:」部分.'寫在文件的開頭,所以它實際上是相反的。無論如何,我試着重新命名它,因爲你建議,我重新啓動Git bash,但它仍然無法正常工作,衝突部分仍然被註釋掉。 – jeerbl

+0

你說得對。我編輯了我的答案。 –

+1

對於perl,替換'sed -i.bak'/ ^#衝突:/,/ ^#$/s /..//'「$ 1」' – jthill

-1

你並不需要將其添加到提交信息自己。一旦你做了合併提交,如果有衝突,git會告訴你它們在哪裏。在包含衝突的合併提交上運行git show --name-only [commit sha],您將會看到它是消息的一部分。

+0

你能舉個例子嗎?我已經測試過它,它似乎沒有工作。據我所知,一旦提交完成,Git不會存儲任何有關衝突的信息。 –

+0

你可以在這裏看到一個例子:https://help.github.com/articles/resolving-a-merge-conflict-from-the-command-line/ – mohammedkhan

+0

有趣的。也許這是一個混帳版本的問題。嘗試時我沒有看到它。 –

1

我使用此它使用sedranges by patterns(和基於jthill's answer

讀人類語言:在# Conflicts:#(blank line)之間的線的範圍內,除去前述#(space)## \?)。

sed -i '/start/,/stop/ s/# \?//' 

準備提交-MSG鉤:

# prepare-commit-msg 
case "$2,$3" in 
    merge,) 
    # Uncomment Conflicts section in merge commit body 
    sed -i '/^# Conflicts:/,/^#\?$/ s/# \?//' "$1" 
    ;; 
    *) ;; 
esac 

這導致

Conflicts: 
    GIT-VERSION-GEN 
    RelNotes