完全取消一次改基

我执行了一个rebase,就像这样:

git rebase --onto master new_background_processing export_background_processing

这并没有做我想做的,所以我执行了重置:

git reset --hard HEAD@{1}

我让我的分支回到了原来的状态,但当我输入git status时,我收到了这条消息:

# You are currently rebasing branch 'export_background_processing' on 'e378641'.

我怎么取消这个完全变基?不知道这本身意味着什么。

430069 次浏览

使用git rebase --abort。从git rebase的官方Linux内核文档:

git rebase --continue | --skip | --abort | --edit-todo | --quit

你很幸运,你没有完成rebase,所以你仍然可以做git rebase --abort。如果你已经完成了重基(它重写历史),事情将会更加复杂。考虑在进行可能具有破坏性的操作(特别是历史重写)之前标记分支的尖端,这样如果出现问题,您就可以倒带。

在你没有正确中止的过去的重基的情况下,你现在(Git 2.12, Q1 2017)有git rebase --quit

参见提交9512177 (12 Nov 2016) by ngibmc Duy (pclouds)(由Junio C Hamano—gitster in 提交06 cd5a1合并,19 Dec 2016)

rebase:将--quit添加到cleanup rebase,保持其他一切不变

在某些情况下,您决定中止正在进行的rebase和 继续做其他事情但是你忘记做"git rebase --abort" 第一次> < /强。或者rebase已经进行了很长时间,你忘记了 它。当你意识到的时候(例如开始另一个rebase) 现在再回头已经太迟了。解决方案通常是

rm -r .git/<some rebase dir>

继续你的生活 但是<some rebase dir>可能有两个不同的目录(这显然需要一些关于rebase如何工作的知识),如果你不在top-dir或在链接的工作树中,“.git”部分可能会更长。在.git中执行"rm -r"是非常危险的,其中的一个错误可能会破坏对象数据库或其他重要数据 为这个用例提供"git rebase --quit",模拟一个先例 那就是"git cherry-pick --quit".


在Git 2.27 (Q2 2020)之前,由“git merge --autostash”创建的用于保持初始脏状态的存储条目在“git rebase --quit”上被错误地丢弃,该问题已被纠正。

参见提交9 b2df3e (28 Apr 2020) by 刘丹顿(Denton-L) (由Junio C Hamano—gitster in 提交3 afdeef合并,29 Apr 2020)

rebase:保存自动保存条目到--quit上的stash reflog

签署人:Denton Liu

a03b55530a ("merge: teach——autostash选项",2020-04-07,Git v2.27.0——合并列在批# 5中)中,为git merge引入了--autostash选项。

(见“git pull”可以自动存储和弹出挂起的更改吗?”)

值得注意的是,当git merge --quit运行时存在一个autostash条目时,它会被保存到stash reflog中。

这与git rebase --quit的当前行为形成对比,在git rebase --quit中,autostash条目只是不再存在。

git rebase --quit中采用git merge --quit的行为,并将自动存储条目保存到存储reflog中,而不是直接删除它。

如果你是“重新”“已经开始调整”,你想要取消,只需注释(#)所有在重基编辑器中列出的提交。

因此,您将得到一条命令行消息

Nothing to do