以下是该方案:
git add
和所有事情。)git rebase --continue
继续使用rebase 我通常不会这样做,但是这种特殊的冲突需要一些严肃的重新编码,我觉得需要记录下来。
我该怎么做?我希望有某种git rebase --continue --let-me-edit-the-message-first
命令,但我无法在the documentation中找到它
我知道:
git rebase
必须将提交消息存储在某处,因为在提交时它会将原始消息放入其中。我只想在两者之间插入我的编辑。rebase --continue
,然后使用git rebase -i
返回并稍后编辑有问题的提交消息。这要求我记住我在整个(可能很长)的rebase过程中提交的内容。呸。我有点惊讶,我已经找不到这个答案......我希望有办法做到这一点。如果有答案,我很难找到它。在解决更改(例如this),一般git add
智慧(例如this和{this之后,我发现混淆等问题需要git rm
或git rebase
{3}}),以及许多对特定案例非常具体的问题(如this)。
由于我很惊讶我找不到这个答案,我有一个第二个问题:是否有更好的方法来记录在rebase期间所做的更改?
答案 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'