題 使用`git merge --squash`或`--no-commit`抑制commit-message模板


使用時 git merge 帶有禁止自動提交的選項(--no-commit 要么 --squashgit 顯然總是為下一個提交消息生成自己的模板;下一個 git commit 忽略了 -t 選項。反正有壓制這個嗎?

我發現最好的解決方法是使用 -m 隨著提交,然後立即運行 git commit --amend。這對我來說似乎很尷尬,它通過在保存之前刪除提交消息模板來消除中止提交的能力。


2
2018-03-05 01:01


起源




答案:


如果您檢查了內容 .git 做完後的目錄 git merge --squash 你會看到的 SQUASH_MSG 包含提交消息模板的文件。這個文件也是在用壓縮後創建的 git rebase -i。如果您不希望Git在執行時自動填充提交消息,則需要刪除此文件 git commit。如果對別名本地有用 git commit 命令為您自動執行此操作,但事實並非如此 可能 與Git。相反,我們應該創建一個這樣的別名 ~/.gitconfig

[alias]
         kommit = "!KOMIT_GIT_DIR=$(git rev-parse --git-dir); if [ -a "${KOMIT_GIT_DIR}/SQUASH_MSG" ] ; then rm "${KOMIT_GIT_DIR}/SQUASH_MSG" ; fi && git commit"

此行檢查SQUASH_MSG是否存在,如果在執行之前執行則刪除 git commit。現在你應該這樣做 git komit 代替 git commit 表演後 git merge --squash

我用Git 2.3.1測試了這個:

$ git --version
git version 2.3.1

3
2018-03-05 22:15



真棒。我實際上希望這是我正在寫的更廣泛的別名的一部分,所以我不介意你不能別名 commit 本身。我會告訴你這是否適用於我的版本(1.7.10.4)。 - Kyle Strand
請注意,您的變量周圍的引號應該被轉義... - Kyle Strand
是的, SQUASH_MSG 正是我想要的。我最後用我的首選模板寫了它而不是刪除它。 - Kyle Strand