如何使用默认的git解决合并冲突后提交信息?(How to use the default git

2019-08-04 08:29发布

做一个合并和解决冲突之后,有一个“容易”的方式只是接受默认生成的命令行提交信息? 我们的一个开发者将解决所有的冲突,然后做一个git commit -m"Merge Commit"取代了生成的承诺,上市的所有冲突的文件信息。 我想有不同的标志,将只取当前文件而无需修改。 我知道有一个-F或--file =选项,但需要知道文件名,所有的时间。

谢谢

Answer 1:

显然,这里的“正确”答案是让你的开发者产生合并提交时要遵循正确的做法为您的团队。 需要注意的是你想要的行为习惯是默认的,只有最近已经开始要求“产生的人”犯下消息合并饭桶。 这是有原因的,它是不那么开发商会短路的过程与意义的消息。

也许开发商产生合并提交时,他/她应该重订呢?

这就是说,这次合并提交的输出git fmt-merge-msg ,对此你必须养活合并的父母犯。



Answer 2:

每的文档 ,我只是尝试这样简单的命令和它的工作对我来说:

git commit --no-edit

随后,运行git log ,以确认默认的消息已被使用。



Answer 3:

通过在合并失败时提交信息,这是要使用的保存在文件夹中的git一个文件,通常默认.git/MERGE_MSG 。 之后,冲突的解决运行git commit养活这个消息保存到默认的编辑器。

如果没有被拾起的消息对自己也可以养活使用git的命令--file选项,从文件中读取提交信息:

git commit --file .git/MERGE_MSG


Answer 4:

只需设置编辑器不执行任何命令:

GIT_EDITOR=true git commit


Answer 5:

git commit --file .git/MERGE_MSG前面已经提到是好的,但它忽略了几个要点:

  • 当前目录是不是最顶层的目录
  • 目前库因此有没有一个Git子模块.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 -

这适用于“正常”的信息库和子模块。 如果# -marked冲突标志应该被丢弃,为了简单起见,仅用于合并消息的第一行可以采取:

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的2.12.0这是发布前两天介绍git merge --continue作出合并提交已停止在合并过程中的冲突。 它工作正常的子模块为好,但不接受--no-edit ,至少现在还不是,所以建议编辑总结合并前更改提交信息。



Answer 6:

如果你真的要执行这个规则,那么有可能是一个办法,迫使该使用Git挂钩。

每当有合并冲突,那么“合并的差异”会告诉你哪些文件相冲突: git diff HEAD HEAD^1 HEAD^2 --name-only 。 我不知道,如果技术上有可能为组合的差异,显示的不仅仅是那些冲突更多的文件。

但是,假设它就像我们想要的(这是一个假设),那么你可以有一个混帐commit-msg钩子检查用户输入及断言消息

  1. 这是一个合并提交?
  2. 如果是这样,那么合并差异显示文件?
  3. 如果是这样,那么字符串“冲突:”跟这些文件的名称?

如果这些条件失败,然后让脚本打印到屏幕的什么是错的解释,然后返回非零中止犯。 你可以有开发商安装此commit钩子,或者你也可以在服务器上安装它来执行它肯定。



文章来源: How to use the default git commit message after resolving merge conflicts?