git rebase - 继续,但修改提交消息以在冲突解决期间记录更改?

时间:2014-12-24 18:57:22

标签: git rebase git-rebase

以下是该方案:

  • 我正在使用git重新分支一个分支,我遇到了冲突并且解决了它们(做了git add和所有事情。)
  • 通常情况下,我只会运行git rebase --continue继续使用rebase
  • 我想编辑此提交的提交消息,以解释我在解决冲突时所做的更改

我通常不会这样做,但是这种特殊的冲突需要一些严肃的重新编码,我觉得需要记录下来。

我该怎么做?我希望有某种git rebase --continue --let-me-edit-the-message-first命令,但我无法在the documentation中找到它

我知道:

  • 我可以运行git commit,手动复制现有的提交消息然后修改它。我不想这样做。 git rebase必须将提交消息存储在某处,因为在提交时它会将原始消息放入其中。我只想在两者之间插入我的编辑。
  • 我可以运行git rebase --continue,然后使用git rebase -i返回并稍后编辑有问题的提交消息。这要求我记住我在整个(可能很长)的rebase过程中提交的内容。呸。

我有点惊讶,我已经找不到这个答案......我希望有办法做到这一点。如果有答案,我很难找到它。在解决更改(例如this),一般git add智慧(例如this和{this之后,我发现混淆等问题需要git rmgit rebase {3}}),以及许多对特定案例非常具体的问题(如this)。

由于我很惊讶我找不到这个答案,我有一个第二个问题:是否有更好的方法来记录在rebase期间所做的更改?

2 个答案:

答案 0 :(得分:4)

在回答这个问题时遇到了同样的问题并对答案感到失望,我认为我想出了一个相当优雅的解决方案,但最后请看我的说明。

git commit -t .git/rebase-apply/msg-clean
git rebase --skip

msg-clean似乎包含原始提交消息,因此使用它作为模板进行提交会在编辑器中提供原始消息。 提交后,skip会移动rebase,而不会尝试重新应用刚刚提交的提交。

注意:我不是大师,所以有人请验证这一点。它似乎与我一起拍的测试报告一起工作,但我没有足够的勇气在我真正的工作回购中尝试它,需要花费数小时的冲突解决工作。如果这件事搞砸了,请不要让我负责。

答案 1 :(得分:2)

我从未意识到这是一个问题。 (我的Git Bash在工作中是一个不同的版本,所以也许它的工作方式不同。)

无论哪种方式,在找到问题的解决方案之前,您都可以执行以下操作:

git reset --hard HEAD
git cherry-pick $(head -1 .git/rebase-apply/patch)

解决冲突

git commit
git rebase --skip

你也可以制作别名:

git config alias.rebase2cherry "! git reset --hard HEAD; git cherry-pick $(head -1 .git/rebase-apply/patch)"
git config alias.commitskip "! git commit; git rebase --skip"

即使您为该提交选择了pick,当出现冲突时,交互式rebase也会显示编辑消息屏幕。但是,它不使用与包含默认冲突文件的cherry pick相同的格式。 (它甚至没有包含在注释掉的部分中。)

对于交互式,需要使用不同的命令来模拟樱桃选择

git cp $(cat .git/rebase-merge/stopped-sha)

如果您使用的是--merge选项,则需要输入

git cherry-pick $(cat $ DIR / rebase-merge / current)

因此,为简化起见,最好使用此别名:

git config alias.rebase2cherry '! git reset --hard HEAD; DIR=$(git rev-parse --git-dir); if [[ -f $DIR/rebase-apply/patch ]]; then git cherry-pick $(head -1 $DIR/rebase-apply/patch); elif [[ -f $DIR/rebase-merge/current ]] ; then git cherry-pick $(cat $DIR/rebase-merge/current); else git cherry-pick $(cat $DIR/rebase-merge/stopped-sha); fi'
相关问题