撤消git rebase

有人知道如何轻松撤消git rebase吗? git

想到的惟一方法是手动进行操做: spa

  • git签出两个分支的提交父对象
  • 而后从那里建立一个临时分支
  • 手动选择全部提交
  • 用手动建立的分支替换我从新创建基础的分支

在我目前的状况下,这是可行的,由于我能够轻松地发现两个分支的提交(一个是个人东西,另外一个是我同事的东西)。 日志

可是,个人方法给个人印象是次优且容易出错(例如,我刚刚使用本身的两个分支进行了从新基准化)。 code

有任何想法吗? 对象

澄清:我说的是一个重定基础,在此基础上重播了不少提交。 不仅是一个 get


#1楼

查尔斯的答案有效,但您可能须要这样作: it

git rebase --abort

reset后清理。 ast

不然,您可能会收到消息“ Interactive rebase already started ”。 基础


#2楼

最简单的方法是找到分支的头提交,就像在reflog中从新启动基础以前同样... date

git reflog

而后将当前分支重置为该分支(一般的警告是在使用--hard选项进行重置以前必须绝对肯定)。

假设参考日志中的旧提交为HEAD@{5}

git reset --hard HEAD@{5}

在Windows中,您可能须要引用如下引用:

git reset --hard "HEAD@{5}"

您能够经过执行git log HEAD@{5}Windows: git log "HEAD@{5}" )来检查候选旧头的历史git log "HEAD@{5}"

若是还没有对每一个分支引用禁用禁用,则应该能够简单地执行git reflog branchname@{1}由于在从新附加到最终头以前,rebase会分离分支头。 我会再次检查,尽管最近尚未验证。

默认状况下,针对非裸存储库激活全部引用日志:

[core]
    logAllRefUpdates = true

#3楼

对于多个提交,请记住任何提交都引用致使该提交的全部历史记录。 所以,在Charles的回答中,将“旧提交”读为“最新的旧提交”。 若是您重置为该提交,那么致使该提交的全部历史记录将从新出现。 这应该作您想要的。


#4楼

将分支重置为其旧提示的悬挂提交对象固然是最好的解决方案,由于它无需花费任何精力便可恢复先前的状态。 可是,若是您恰巧丢失了这些提交(例如,由于在此期间您对存储库进行了垃圾回收,或者这是一个新的克隆),则始终能够从新创建分支的基础。 关键是--onto开关。

比方说,你有一个特性分支想象力称为topic ,你分出master时的尖master0deadbeef提交。 在topic分支上的某个时刻,您作了git rebase master 。 如今您要撤消此操做。 这是如何作:

git rebase --onto 0deadbeef master topic

这将接受不在master上的全部topic提交,并在0deadbeef之上重播它们。

使用--onto ,您能够将您的历史从新排列成几乎任何形状

玩得开心。 :-)


#5楼

若是您还没有完成变基,而且在变基的中间,能够进行如下工做:

git rebase --abort
相关文章
相关标签/搜索