有人知道如何轻松撤消git rebase吗? git
想到的惟一方法是手动进行操做: spa
在我目前的状况下,这是可行的,由于我能够轻松地发现两个分支的提交(一个是个人东西,另外一个是我同事的东西)。 日志
可是,个人方法给个人印象是次优且容易出错(例如,我刚刚使用本身的两个分支进行了从新基准化)。 code
有任何想法吗? 对象
澄清:我说的是一个重定基础,在此基础上重播了不少提交。 不仅是一个 get
查尔斯的答案有效,但您可能须要这样作: it
git rebase --abort
reset
后清理。 ast
不然,您可能会收到消息“ Interactive rebase already started
”。 基础
最简单的方法是找到分支的头提交,就像在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
对于多个提交,请记住任何提交都引用致使该提交的全部历史记录。 所以,在Charles的回答中,将“旧提交”读为“最新的旧提交”。 若是您重置为该提交,那么致使该提交的全部历史记录将从新出现。 这应该作您想要的。
将分支重置为其旧提示的悬挂提交对象固然是最好的解决方案,由于它无需花费任何精力便可恢复先前的状态。 可是,若是您恰巧丢失了这些提交(例如,由于在此期间您对存储库进行了垃圾回收,或者这是一个新的克隆),则始终能够从新创建分支的基础。 关键是--onto
开关。
比方说,你有一个特性分支想象力称为topic
,你分出master
时的尖master
是0deadbeef
提交。 在topic
分支上的某个时刻,您作了git rebase master
。 如今您要撤消此操做。 这是如何作:
git rebase --onto 0deadbeef master topic
这将接受不在master
上的全部topic
提交,并在0deadbeef
之上重播它们。
使用--onto
,您能够将您的历史从新排列成几乎任何形状 。
玩得开心。 :-)
若是您还没有完成变基,而且在变基的中间,能够进行如下工做:
git rebase --abort