如何轻松撤消git重基?冗长的手动方法是:

签出两个分支的提交父级创建并签出临时分支手工挑选所有提交重置故障的重基分支以指向临时分支

在我目前的情况下,这是可行的,因为我可以很容易地发现两个分支的提交(一个是我的东西,另一个是同事的东西)。然而,我的方法给我的印象是次优且容易出错(假设我刚刚用自己的两个分支重新建立了基础)。

澄清:我所说的是一个重基,在重基过程中,多次提交被重复,而不仅仅是一次。


当前回答

我尝试了重置和刷新的所有建议,但没有成功。恢复IntelliJ的本地历史记录解决了文件丢失的问题

其他回答

将分支重置为其旧提示的悬空提交对象当然是最好的解决方案,因为它可以恢复以前的状态,而无需花费任何精力。但是,如果您碰巧丢失了这些提交(例如,因为您同时垃圾收集了存储库,或者这是一个新的克隆),您可以再次重新设置分支的基础。这一点的关键是--on开关。

假设你有一个想象中的主题分支,称为topic,当master的提示是0deadbeef提交时,你分支了master。在主题分支的某个时刻,您完成了git rebase master。现在您要撤消此操作。以下是操作方法:

git rebase --onto 0deadbeef master topic

这将接收所有关于主题的提交,但这些提交不在主控上,并在0个标题的顶部回放它们。

有了--on,你可以将你的历史重新整理成任何形状。

玩得开心。:-)

实际上,在执行任何非平凡操作之前,我在分支上放置了一个备份标记(大多数重基是微不足道的,但如果它看起来很复杂,我会这样做)。

然后,恢复就像git reset一样简单——hard BACKUP。

git reset --hard origin/{branchName}

是重置rebase所做的所有本地更改的正确解决方案。

查尔斯的答案有效,但你可能想这样做:

git rebase --abort

重置后进行清理。

否则,您可能会收到消息“Interactive rebase already started”。

另一种不需要进行硬重置的方法是创建一个具有您所需起点的新分支。

与其他解决方案一样,您可以使用reflog来找到正确的起点。

git reflog

(您也可以在此处使用git-log-g了解更多详细信息)

然后注意对提交SHA的引用(例如:e86a52b851e)。

最后,使用gitbranch命令。

git branch recover-branch e86a52b851e

参考:https://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery#_data_recovery