如果使用--no-commit,merge失败或中止,如何生成git merge -log消息?

时间:2015-02-21 03:43:21

标签: git merge

我正在执行git merge两个分支并想要包含--log开关,但忘了。我中止了提交消息编辑器再试一次。

现在我处于MERGE_HEAD存在的情况下,所以我无法重新运行合并,并且我已经指示"请在合并之前提交您的更改。&#34 ;

当提交完成合并时,我无法找到一个选项来创建我从merge --log开关获得的相同消息。

问:删除.git/MERGE_HEAD的解决方案是否会再次合并,或者是git commitgit fmt-merge-msg的某种组合会产生类似于-log的消息吗?

我认为这可能是一个常见问题,但我无法通过git-smc,Google或SO找到解决方案。

1 个答案:

答案 0 :(得分:2)

一般情况下,如果您开始合并并决定不想要它,请使用git merge --abort。 (然后您可以使用不同的选项重新启动它。)

但是,如果您确实已经完成了一些工作,那么您可以收集提交主题消息(就像您建议的那样,例如使用git fmt-merge-msg,或者仅使用git log --format=' %s' -n <num> branch)并将它们放入在git commit合并时进行的最终合并。

之前我从未使用过git fmt-merge-msg --log,但它似乎想要在标准输入(或文件)中,git fetch形式的一系列行通常留在FETCH_HEAD中:

  • 原始SHA-1
  • 两个文字标签
  • 分支机构的名称

因此(在我的测试中的分支example上):

$ echo $(git rev-parse master)$'\t\t'"'master'" | git fmt-merge-msg --log
Merge 'master' into example

* master:
  [four commits listed here, in my case]

一旦你有这样的基本提交文本,你可以使用提交的-F <file>选项从文件中读取它,或-F -从标准输入读取它。

(注意:git merge --log master产生了一个略有不同的消息,即:

Merge branch 'master' into example

* master:
  [same four commits listed]

如果我将echo命令更改为branch 'master'第一个行匹配,但前面带有星号的行显示为branch 'master'。)< / p>