如何轻松撤消git重基?冗长的手动方法是:
签出两个分支的提交父级创建并签出临时分支手工挑选所有提交重置故障的重基分支以指向临时分支
在我目前的情况下,这是可行的,因为我可以很容易地发现两个分支的提交(一个是我的东西,另一个是同事的东西)。然而,我的方法给我的印象是次优且容易出错(假设我刚刚用自己的两个分支重新建立了基础)。
澄清:我所说的是一个重基,在重基过程中,多次提交被重复,而不仅仅是一次。
如何轻松撤消git重基?冗长的手动方法是:
签出两个分支的提交父级创建并签出临时分支手工挑选所有提交重置故障的重基分支以指向临时分支
在我目前的情况下,这是可行的,因为我可以很容易地发现两个分支的提交(一个是我的东西,另一个是同事的东西)。然而,我的方法给我的印象是次优且容易出错(假设我刚刚用自己的两个分支重新建立了基础)。
澄清:我所说的是一个重基,在重基过程中,多次提交被重复,而不仅仅是一次。
当前回答
我通常做的是git reset#commit_hash
到最后一次提交,我认为rebase没有效果。
然后git拉动
现在,分支应该与主分支完全匹配,而重基提交不应该在其中。
现在,你可以在这个分支上随意选择提交的内容。
其他回答
如果你不想硬复位。。。
您可以从reflog签出提交,然后将其保存为新分支:
git reflog
在开始重定基础之前找到提交。您可能需要进一步向下滚动才能找到它(按Enter键或PageDown键)。记下HEAD编号并更换57:
git checkout HEAD@{57}
检查分支/提交,如果正确,则使用此HEAD创建一个新分支:
git checkout -b new_branch_name
实际上,在执行任何非平凡操作之前,我在分支上放置了一个备份标记(大多数重基是微不足道的,但如果它看起来很复杂,我会这样做)。
然后,恢复就像git reset一样简单——hard BACKUP。
查尔斯的答案有效,但你可能想这样做:
git rebase --abort
重置后进行清理。
否则,您可能会收到消息“Interactive rebase already started”。
实际上,rebase将您的起点保存到ORIG_HEAD,因此这通常很简单:
git reset --hard ORIG_HEAD
然而,reset、rebase和merge都会将原始HEAD指针保存到ORIG_HEAD中,因此,如果您在尝试撤消rebase之后执行了这些命令,则必须使用reflog。
如果您在git rebase中搞乱了一些东西,例如git rebase--abort,而您有未提交的文件,它们将丢失,git reflog将不会有帮助。这件事发生在我身上,你需要跳出框框来思考。如果你像我一样幸运,并使用IntelliJ Webstorm,那么你可以右键单击->本地历史记录,并可以恢复到文件/文件夹的先前状态,无论你在版本控制软件中犯了什么错误。再运行一次故障保护总是很好的。