撤消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
相關文章
相關標籤/搜索