解决合并冲突后如何使用默认的git commit消息?

yoy*_*dyn 55 git merge message conflict commit

在进行合并和解决冲突之后,是否有一种"简单"的方法来从命令行接受默认生成的提交消息?我们的一个开发人员将解决所有冲突,然后执行一个git commit -m"Merge Commit"替换列出所有冲突文件的生成的提交消息.我想有一个不同的标志,只需要修改当前文件.我知道有一个-F或--file =选项,但这需要始终知道文件名.

谢谢

gMa*_*ale 87

根据文档,我只是尝试了这个简单的命令,它对我有用:

git commit --no-edit
Run Code Online (Sandbox Code Playgroud)

然后,运行git log以确认已使用默认消息.

  • 或者输出更短:`git log -1`. (3认同)

Lop*_*Sae 18

默认情况下,当合并失败时,通常会将要使用的提交消息保存在git文件夹的文件中.git/MERGE_MSG.解决冲突后,运行git commit会将此保存的消息提供给默认编辑器.

如果消息没有自行获取,则可以使用--file选项从git命令获取,该选项从文件中读取提交消息:

git commit --file .git/MERGE_MSG
Run Code Online (Sandbox Code Playgroud)


Chr*_*ial 14

只需将编辑器设置为不执行任何操作的命令:

GIT_EDITOR=true git commit
Run Code Online (Sandbox Code Playgroud)


And*_*oss 7

显然,这里的"正确"答案是让您的开发人员在生成合并提交时遵循团队的正确实践.请注意,您希望以前的行为是默认行为,并且最近只有git开始要求合并的"人工生成"提交消息.这是有原因的,并不是说开发人员会用无意义的消息来短路过程.

也许开发人员在他/她应该改变时会产生合并提交?

也就是说,合并提交是git fmt-merge-msg您必须向合并提交的父级提供的输出.

  • 这个命令是如何使用的?文档说它期望合并对象由stdin提供.我尝试通过管道输入,并通过文件提供父母的修订号,但它仍然丢弃了一个"致命的:第1行的错误:......". (2认同)

Lyu*_*riv 6

git commit --file .git/MERGE_MSG正如已经提到的那样,但它忽略了几点:

  • 当前目录不是最顶层目录
  • 当前存储库是一个 Git 子模块,因此没有.git目录,只有一个文件.git

并可选:

  • MERGE_MSG包含有关存在冲突的文件的一些信息。

前两点可以与 一起使用git rev-parse

git commit -F "$(git rev-parse --git-dir)/MERGE_MSG"
Run Code Online (Sandbox Code Playgroud)

或者,使用 Git 别名:

commit-merge = !cat $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -
Run Code Online (Sandbox Code Playgroud)

这在“普通”存储库和子模块中都有效。如果#应丢弃 - 标记的冲突标记,为简单起见,只能采用合并消息的第一行:

git commit -m $(head -1 $(git rev-parse --git-dir)/MERGE_MSG)
Run Code Online (Sandbox Code Playgroud)

或者另一个别名:

commit-merge = !head -1 $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -
Run Code Online (Sandbox Code Playgroud)

我必须-F在别名中使用该键,因为我无法让 Git 发出要在使用 bash 生成的命令中处理的引号(否则git commit会在合并期间抱怨部分提交)。


两天前发布的Git 2.12.0引入了git merge --continue进行合并提交的功能,该提交在合并过程中因冲突而停止。它也适用于子模块,但--no-edit至少目前还不接受,因此建议编辑器在结束合并之前更改提交消息。