我想使用rebase修改最近的提交。魔术命令是git rebase -i
假设您正在尝试删除提交问题
- 首先,找出提交的回程(大约)。然后做:
- git rebase -i HEAD~10
- 来源:
Greg Hewgill's answer对于一个不那么复杂的git问题
这非常有效,除非你最近做过任何事情--no-ff合并
如果您碰巧关注git flow,那么您可以随时进行-no-ff合并
- 请查看下面的“来源”部分,了解如何& 为什么的rebase -i炸毁--no-ff合并
- 现在,只要相信我(或亲自尝试):它不是很好。
如果我们查看this page,我们会看到--preserve-merges
(或简称-p
)选项,我们可以尝试将-i
替换为
问题是,如果我们这样做,我们就不再在之前提供好-i
弹出窗口了
- >选择“编辑此提交,sqaush那一个”等的选项
- >因此,我们无法达到我们最初的目标:使用rebase修改/删除一些最近的提交:(
那么,我们该怎么办?
问题部分:
- First example rebase谋杀--no-ff承诺
- Second example
- 他的引述:“TL; DR版本是这样的:当变基时,总是使用-p标志”
答案 0 :(得分:1)
-p
和-i
不是互斥的 - 您可以同时使用它们。 然而在执行此操作时要非常小心 - 更改提交顺序是一个错误的想法。您也不应该尝试以这种方式删除合并提交;让事情陷入不正常的状态非常容易。
git rebase -p -i HEAD~10
答案 1 :(得分:1)
以上使用-p
和-i
一起是正确的 - 但是我想指出你不需要使用交互式更多来摆脱提交。您可以使用--onto
来明确说明您希望基数的位置。假设你想摆脱HEAD~10,......
git rebase --onto HEAD~11 HEAD~9 HEAD
这就是说,接受HEAD
中 的任何提交,但HEAD~9
中的**不是*,并将它们应用到HEAD~11
的末尾。这意味着它会跳过HEAD~10
。上面的解决方案运行得很好,但有时候,为了摆脱更大的历史记录,你可能想要使用--onto
。请注意,与-p
一样,您也可以使用--onto
的交互模式。
关于non-fast-forward merges and rebasing, take a look at this回答我给了另一个问题。它主要解释了--onto
的用法,但是如果你仔细阅读,你会找到关于--no-ff合并和变基的解释。