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

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

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

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


当前回答

如果你不想硬复位。。。

您可以从reflog签出提交,然后将其保存为新分支:

git reflog

在开始重定基础之前找到提交。您可能需要进一步向下滚动才能找到它(按Enter键或PageDown键)。记下HEAD编号并更换57:

git checkout HEAD@{57}

检查分支/提交,如果正确,则使用此HEAD创建一个新分支:

git checkout -b new_branch_name

其他回答

实际上,rebase将您的起点保存到ORIG_HEAD,因此这通常很简单:

git reset --hard ORIG_HEAD

然而,reset、rebase和merge都会将原始HEAD指针保存到ORIG_HEAD中,因此,如果您在尝试撤消rebase之后执行了这些命令,则必须使用reflog。

如果您成功地重新基于远程分支,并且不能git rebase--abort,那么您仍然可以使用一些技巧来保存您的工作,并且不需要强制推送。假设您的当前分支因错误而被重新设置为分支,并正在跟踪源/分支

gitbranch-m your branch rebased#重命名当前分支git checkout origin/your branch#签出到源已知的最新状态git结帐-b您的分行检查git-log您的分支,将其与git-log分支进行比较,并定义分支中缺少的提交gitcherry-pickCOMMIT_HASH用于分支中的每个提交推动您的更改。请注意,两个本地分支与远程/您的分支关联,您应该只推送您的分支

假设我将master重新设置为我的功能分支,我得到了30个新的提交,这些提交会破坏一些东西。我发现通常只删除错误的提交是最简单的。

git rebase -i HEAD~31

最后31次提交的交互式重新基准(如果您选择太多,这不会有什么影响)。

只需将要删除的提交标记为“d”而不是“pick”即可。现在,提交被删除,从而有效地取消了重新基化(如果只删除重新基化时刚获得的提交)。

git reset --hard origin/{branchName}

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

我通常做的是git reset#commit_hash

到最后一次提交,我认为rebase没有效果。

然后git拉动

现在,分支应该与主分支完全匹配,而重基提交不应该在其中。

现在,你可以在这个分支上随意选择提交的内容。