2016-01-18 95 views
2

我已經添加在提交信息準備提交-MSG文件中的一些變化,然後我exec的命令如何更改默認的git的承諾消息

混帳配置--global commit.template的.git /掛鉤/準備提交 - 味精

後,當我做git的承諾,我收到這樣的事情我改變

40線,然後

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# Explicit paths specified without -i nor -o; assuming --only paths... 
# On branch master 
# Changes to be committed: 
# 
#  modified: test 
#  

問題是否有機會在頂部顯示此默認消息?或者更好地永久刪除此消息?

回答

3

你似乎混淆與prepare-commit-messagecommit.template選項(這爲--template選項git commit提供一個默認值)。

通常git commit使用操作的順序如下:

  1. 執行pre-commit鉤子,如果存在且是可運行的。如果它退出非零,則放棄提交。
  2. 將任何指定或配置的模板(見下文)複製到臨時文件。如果沒有模板或模板路徑不可讀,請從一個空的臨時文件開始。
  3. 添加行# Please enter the commit message ...,輸出git status
  4. 運行prepare-commit-message鉤子(如果它存在並且可運行)在臨時文件上。
  5. 在臨時文件上打開編輯器。 (您編輯從$GIT_EDITOR設置,則core.editor配置,$VISUAL$EDITOR,或者一個內置的默認情況下,無論是第一套。)
  6. 當您退出編輯器,使提交,或停止提交,根據關於您是否提供了提交消息。

如果使用-f-m選項,步驟2,3,5,通常跳過(儘管你可以強迫混帳加入--edit打開你的編輯器)。大概你沒有使用這些選項。

什麼--template選項的作用,因此什麼commit.template不,是提供了一個文件,該文件將git commit在步驟2中這不會影響線在第3步中添加複製的路徑名,雖然路徑.git/hooks/prepare-commit-message (可能)是一個git可以讀取的文件,它對於你的模板來說不是一個非常明智的名字,因爲如果這個相同的路徑變得可執行,那麼這個文件將變成可運行的,並且步驟4可能會表現得很糟糕。

你可以告訴git commit不是做第3步加入--no-status。 (另外,由於有些奇怪的副作用,明確禁止步驟5的--no-edit也抑制步驟3。)

或者,您可以利用步驟4來消除部分或全部的git status輸出和標準# Please enter...消息。 prepare-commit-message鉤子可以對模板文件進行任意更改。

請注意,--cleanup=<mode>會影響最終提交消息的結果,以及步驟6的處理。有關詳細信息,請參閱the git commit documentation

+0

哦謝謝你的回答,但至於現在我不明白爲什麼可以通過步驟4的問題?你能解釋一下嗎? 此外,我發現命令 - > > git config --global commit.status false 而且我可以看到這個命令從git中刪除提交此模板「請輸入...」問題是一個好方法喜歡這個? 另外我怎樣才能把這個改變(在配置文件上)推到其他分支?或者我應該改變它在主分支? – Adrianeo

+1

在第4步,git會運行* .git/hooks/prepare-commit-message中的文件,如果可以的話。如果你將普通文本放在這個文件中,如果git能夠運行它,會發生什麼?至於'commit.status',將它設置爲'false'會使'--no-status'成爲默認值,所以這是一個合理的方法。同時你的配置(不管是'--global'還是local)不是在改變分支時改變的,所以這裏沒有問題。 – torek