在进行合并并解决冲突后,是否有一种“简单”的方法来接受从命令行默认生成的提交消息?
我们的一位开发人员将解决所有冲突,然后执行
git commit -m"Merge Commit"
替换列出所有冲突文件的生成的提交消息。我想要一个不同的标志,它只接受当前文件而不进行修改。我知道有一个 -F
或 --file=
选项,但这需要始终知道文件名。
.git/MERGE_MSG
。解决冲突后,运行
git commit
会将保存的消息提供给默认编辑器。如果消息本身没有被拾取,则可以使用
--file
选项将其提供给 git 命令,该选项从文件中读取提交消息:
git commit --file .git/MERGE_MSG
GIT_EDITOR=true git commit
也许开发人员正在生成合并提交,而他/她应该进行变基?
也就是说,合并提交是
git fmt-merge-msg
的输出,您必须将合并提交的父级提供给它。
git commit --file .git/MERGE_MSG
正如已经提到的那样很好,但它忽略了几点:
.git
目录,但有一个文件
.git
。
MERGE_MSG
包含有关存在冲突的文件的一些信息。
git rev-parse
使用:
git commit -F "$(git rev-parse --git-dir)/MERGE_MSG"
或者,使用 Git 别名:
commit-merge = !cat $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -
这适用于“普通”存储库和子模块。如果应丢弃
#
标记的冲突标记,为简单起见,只能采用合并消息的第一行:
git commit -m $(head -1 $(git rev-parse --git-dir)/MERGE_MSG)
或另一个别名:
commit-merge = !head -1 $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -
我必须在别名中使用
-F
键,因为我无法让 Git 发出要在使用 bash 生成的命令中处理的引号(否则
git commit
会在合并期间抱怨部分提交)。两天前发布的
git merge --continue
来进行合并提交,该提交在合并期间因冲突而停止。它也适用于子模块,但至少目前不接受 --no-edit
,因此建议编辑者在结束合并之前更改提交消息。您可以使用默认的
":wq" 应用合并并退出 VIM。 以下步骤的演练:
git commit (hit enter)
:wq (to exit and apply merge in VIM editor)
$git commit --amend --no-edit
它将接受您之前提交的消息,并且不会发生任何改变。
merge conflict
feature branch
中应用主代码以避免冲突时,这将会很有帮助。
git diff HEAD HEAD^1 HEAD^2 --name-only
更多
文件而不仅仅是冲突文件。但是,假设它按照我们想要的方式工作(这是一个假设),那么您可以有一个 git
commit-msg
钩子来检查用户输入的消息并断言
这是合并提交吗? 如果是这样,组合差异是否显示文件?