sto*_*tic 11 git rebase git-rebase
这是场景:
git add和所有事情).git rebase --continue继续运行rebase我通常不会这样做,但这种特殊的冲突需要一些严重的重新编码,我觉得需要记录.
我该怎么做呢?我希望有某种git rebase --continue --let-me-edit-the-message-first命令,但我无法在文档中找到它
我知道:
git rebase必须将提交消息存储在某处,因为当它提交时它会将原始消息放入其中.我只想在两者之间插入我的编辑.rebase --continue,然后使用git rebase -i返回并稍后编辑有问题的提交消息.这要求我记住我在整个(可能很长)的rebase过程中提交的内容.呸.我有点惊讶,我已经找不到答案了......我希望有办法做到这一点.如果有答案,我很难找到它.我发现混淆git add等等git rm于解决变化的需要或之后(像这样),一般git rebase智慧(比如这个和这个),以及许多看似非常特定于特定情况的问题(像这样).
由于我很惊讶我找不到这个答案,所以我有一个第二个问题:是否有更好的方法来记录在rebase期间所做的更改?
在提出了完全相同的问题并且对答案感到失望之后,我想我为此提出了一个相当优雅的解决方案,但请参阅最后的注释。
git commit -t .git/rebase-apply/msg-clean
git rebase --skip
msg-clean似乎包含原始提交消息,因此使用它作为模板进行提交会在编辑器中提供原始消息。提交后,跳过操作将移动基准,而不会尝试重新应用刚刚进行的提交。
注意:我不是专家,所以请有人验证。它似乎可以与我打过的测试存储库一起使用,但是我还没有足够勇气尝试在我的真实工作存储库中进行大量的冲突解决工作。如果这炸毁了,请不要对我负责。
我从来没有意识到这是一个问题。(我工作中的 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。但是,它不使用与默认情况下包含冲突文件的樱桃选择相同的格式。(它甚至不包含在注释掉的部分中。)
对于交互,需要不同的命令来模拟cherry pick
git cp $(cat .git/rebase-merge/stopped-sha)
如果您正在使用该--merge选项,您需要输入
gitcherry-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'