如果使用 --no-commit,合并失败或中止,如何生成 git merge --log 消息?
How to generate the git merge --log message if using --no-commit, merge fails or is aborted?
我正在执行两个分支的 git merge
并想包括 --log
开关,但忘记了。我中止了提交消息编辑器以重试。
现在我处于 MERGE_HEAD 存在的情况,所以我无法重新运行合并,我被指示 "Please, commit your changes before you can merge."
提交完成合并时,我找不到创建与从 merge --log
开关获得的相同消息的选项。
问:解决方案是删除 .git/MERGE_HEAD
然后再次合并,还是 git commit
和 git fmt-merge-msg
的某种组合会生成类似日志的消息?
我认为这可能是一个常见问题,但我无法通过 git-smc、Google 或 SO 找到解决方案。
一般来说,如果您开始合并并最终决定不想要它,只需使用 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'
.)
我正在执行两个分支的 git merge
并想包括 --log
开关,但忘记了。我中止了提交消息编辑器以重试。
现在我处于 MERGE_HEAD 存在的情况,所以我无法重新运行合并,我被指示 "Please, commit your changes before you can merge."
提交完成合并时,我找不到创建与从 merge --log
开关获得的相同消息的选项。
问:解决方案是删除 .git/MERGE_HEAD
然后再次合并,还是 git commit
和 git fmt-merge-msg
的某种组合会生成类似日志的消息?
我认为这可能是一个常见问题,但我无法通过 git-smc、Google 或 SO 找到解决方案。
一般来说,如果您开始合并并最终决定不想要它,只需使用 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'
.)