在执行合并和解决冲突之后,是否有一种“简单”的方法可以从命令行接受默认生成的提交消息?我们的一个开发人员将解决所有的冲突,然后执行一个 git commit -m"Merge Commit"来替换生成的提交消息,该消息列出了所有的冲突文件。我希望有一个不同的标志,只是采取当前文件没有修改。我知道有一个-F 或—— file = 选项,但这需要始终知道文件名。
git commit -m"Merge Commit"
谢谢你
只需将编辑器设置为一个不执行任何操作的命令:
GIT_EDITOR=true git commit
显然,这里的“正确”答案是让您的开发人员在生成合并提交时遵循您的团队的正确实践。请注意,您想要的行为曾经是默认行为,而且直到最近 git 才开始要求“人工生成”合并提交消息。这是有原因的,并不是为了让开发人员用一个毫无意义的信息来缩短这个过程。
也许开发人员正在生成合并提交,而他/她应该重新定基?
也就是说,合并提交是 git fmt-merge-msg的输出,您必须向合并提交的父级提供 git fmt-merge-msg。
git fmt-merge-msg
默认情况下,当合并失败时,将要使用的提交消息保存在 git 文件夹中的一个文件中,通常是 .git/MERGE_MSG。冲突解决后,运行 git commit将把这条保存的消息提供给默认编辑器。
.git/MERGE_MSG
git commit
如果消息本身没有被拾取,那么可以使用 --file选项将其提供给 git 命令,该选项从文件中读取提交消息:
--file
git commit --file .git/MERGE_MSG
如果您真的想强制执行这个规则,那么可能有一种方法可以使用 git 钩子强制执行这个规则。
每次出现合并冲突时,“合并差异”将显示哪些文件发生了冲突: git diff HEAD HEAD^1 HEAD^2 --name-only。我不知道是否从技术上来说,这是可能的组合差异显示 更多文件比只是冲突的。
git diff HEAD HEAD^1 HEAD^2 --name-only
但是,假设它像我们想要的那样工作(这是一个假设) ,那么您可以拥有一个 git commit-msg钩子,它检查消息 用户输入的并断言
commit-msg
如果这些条件失败,那么让脚本打印来屏幕显示错误的解释,然后返回非零值来中止提交。您可以让开发人员安装这个提交钩子,或者您也可以将其安装在服务器上以确保实施它。
根据 那些文件,我只是尝试了这个简单的命令,它对我很有效:
git commit --no-edit
然后,运行 git log以确认使用了默认消息。
git log
上面提到的 git commit --file .git/MERGE_MSG很好,但它忽略了几点:
.git
还可以选择:
MERGE_MSG
前两点可以与 git rev-parse一起使用:
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会在合并期间报告部分提交)。
-F
两天前还是 释放的 Git 2.12.0引入了 git merge --continue来进行合并提交,该提交在合并过程中由于冲突而停止。它对于子模块也可以正常工作,但是不接受 --no-edit,至少现在还不能,因此建议编辑器在结束合并之前更改提交消息。
git merge --continue
--no-edit
可以使用没有消息的默认 “笨蛋承诺”。这将触发控制台中的 VIM 编辑器。默认消息将出现在 VIM 中,只需使用命令 “ : wq”应用合并和退出 VIM 即可。
以下步骤的演练:
git commit (hit enter) :wq (to exit and apply merge in VIM editor)
$git commit --amend --no-edit
merge conflict
feature branch