我正在执行git merge
两个分支并想要包含--log
开关,但忘了。我中止了提交消息编辑器再试一次。
现在我处于MERGE_HEAD存在的情况下,所以我无法重新运行合并,并且我已经指示"请在合并之前提交您的更改。&#34 ;
当提交完成合并时,我无法找到一个选项来创建我从merge --log
开关获得的相同消息。
问:删除.git/MERGE_HEAD
的解决方案是否会再次合并,或者是git commit
和git fmt-merge-msg
的某种组合会产生类似于-log的消息吗?
我认为这可能是一个常见问题,但我无法通过git-smc,Google或SO找到解决方案。
答案 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
中:
因此(在我的测试中的分支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>