以下是我修改之前提交历史记录的内容:
A B C [master]
\
D E F G H I [refactor]
这是我目前的提交历史记录:
A --------------- E B C F D [master branch]
\
B C D E F G H I [refactor branch]
以下是我希望它的外观:
A B C D F G [master branch]
\
E H I [refactor branch]
我还没有完全理解rebase命令会做什么,所以我现在有点乱。这让我有两个问题:
有没有办法轻松撤消最后一个rebase命令的效果 你跑了? (因为我可能会再次搞砸了。)
我应该用什么系列的命令来帮助我 是?我怀疑我想使用一些rebase和 cherry_pick,但不想再搞乱了。
感谢您的时间和帮助。
雷
答案 0 :(得分:2)
不应该有樱桃采摘的任何需要 - 你想要的结果是一个似乎已经存在的单个分支(重构)。编辑:我刚刚意识到它并不完全相同。我最后会添加一条关于它的说明。
请注意,您的第一个图表实际上不存在:您不能在单独的分支中具有完全相同的提交(您可能具有不同的提交哈希值,其中包含相同的更改)。
另请注意,您正在做的事情是使主人与您可能已经推送到的任何存储库不兼容 - 如果您已经与其他人共享主人,那么反对主人通常不是您想要的。通常,您将在master上重新分支分支(然后将分支合并到master中)。
无论如何,这应该按照你要求做的,假设“重构”中的提交。是好的:
git branch old-master master # just so you don't lose anything...
git checkout refactor
git branch -d master
# git rebase --interactive D # commit D is the one in refactor branch
git branch master G # commit G is the one in refactor branch
我已经添加了rebase命令注释掉了中间:如果你真的想重新排序E,F和G,那将会很有用,如图所示。在rebase编辑器中,你可以按照自己的意愿对提交进行重新排序,git会尝试这样做 - 但是你可能需要在被问到时手动修复。
取消"撤销rebase"是的,这是可能的,但需要更深入地了解git:参见例如this answer和git reflog
输出。
答案 1 :(得分:0)
很难知道"撤消"最好的选择是什么?你做了什么。 你应该在你的rebase和你实际输入的命令之后指出你的分支是什么样的。
假设您的初始状态为:
A --------------- E B C F D [master branch]
\
B C D E F G H I [refactor branch]
你想要
A E B C F D [master branch]
\
B' C' D' F' E' H' I' [refactor branch]
请注意,B变为B',C变为C'等
然后你应该这样做:
$ git rebase <upstream> <branch>
即
$ git rebase master refactor
如果你想压缩提交B&#39;,C&#39;等等进入一个提交,你可以使用-ase选项和rebase命令这样做,这样你最终得到:
A E B C F D [主分支] \ B&#34; [重构分支]
其中B&#34;是由B,C等产生的壁球提交 请查看git rebase documentation