更新未在 git 合并中显示的合并提交消息

Update a merge commit message that doesn't show up in git merge

我有以下提交,我需要用分支名称更新中间的提交。

...
...
9a3de7d [#US810469]Add configuration
807fed0 Merge branch 'master' of github.xx.com:org/repo
6153e1e [#US810469] fix typo

我意识到当我 git rebase -i 它没有显示合并提交时,我在这里了解了原因 [Merge commits don't appear in git rebase --interactive

在交互式 shell 中,我看到它说如果您删除一行,您将丢失提交。我想也许我可以在我想要的地方添加一个提交 :) 但这没有用。它一直向我显示要编辑的待办事项。我尝试编辑它们并再次提交,但每次都失败。

如何将中间提交的消息更改为“[#US810469]Merge branch 'master' of github.xx.com:org/repo”?

当您 git rebase -i 时,您正在以线性方式重写历史记录,从而删除您的合并提交。你可以这样做(假设你在 develop 分支上)

git branch temp # create temporary branch where you are now (at 6153e1e I suppose)
git reset --hard 807fed0 # move develop branch to the merge commit
git commit --amend # now edit your message to look the way you want it
git cherry-pick temp # since there is only commit in temp branch, cherry-pick will do

如果您在合并提交后有多个提交,那么您可以:

而不是最后一个 cherry-pick
git checkout temp
git rebase develop
git checkout develop
git rebase temp
git branch -d temp

这可能有一些捷径,但这样我很容易理解这些步骤;希望你也是...

与其在交互式对话框中插入一行,不如在要插入提交之前将选择更改为对提交的编辑。 示例:

pick 123abccc one
pick 1234abcc two
pick 12345abc three

在 123abccc(一)之前插入一个新提交

pick 123abccc one
edit 1234abcc two
pick 12345abc three

在执行 git rebase --continue 之前添加任何新提交。

编辑: 如果您只想更改提交消息,请将 pick 更改为 reword。

如果您您想要修改的合并修订后只有普通的旧提交(没有合并),您可以考虑手动:

git checkout 807fed0
git commit --amend -m "Here's the fixed comment"
git cherry-pick 807fed0..master # master or whatever branch
# if everything is ok, then move the local pointer of master (or whatever branch) and push as required
git branch -f master
git push whatever-remote -f master

准备就绪!