2012-09-05 61 views
0

我知道最簡單的方法是致電git reflog查找分支的原始頭部,並且將舊的提交調用git reset如何反轉git rebase?

但某些情況reflog不可用,例如在另一臺PC上的存儲庫中。

任何方法來扭轉git rebase並設置爲舊的提交?

回答

3

我不知道我理解你的問題。如果我理解正確,你在回購上做了一些修改,編輯歷史,推送,拉到另一個存儲庫,並想從那裏取消歷史編輯? 這是不能做到的,因爲你沒有那裏的「原始」歷史。

正如你所說,git reflog是要走的路,我不是爲什麼你不能使用它(除了我剛剛勾畫的場景)。你能編輯你的文章以提供更多信息嗎?

0

當你做rebase你正在重寫歷史。分支會指向不同的提交。舊提交被刪除。您可以通過git fsck --lost-found列出並嘗試恢復。但是,它們可用於垃圾收集,所以如果您之前已經完成了它們,它們可能會無法挽回地丟失。

0

只需使用(ref)ORIG_HEAD,它被設置爲在分支的內部復位階段之前指向分支尖端。 - 看到manual

所以checkout ORIG_HEAD,創建一個新的分支名稱,它(停止它是一個分離的頭),你應該對你的方式(檢查它的所有gitk連接,或者您favoutite漂亮的一個線圖命令)

1

在這種情況下,沒有辦法自動「撤銷」rebase,但可以手動進行另一次rebase。例如,如果您有:

A---B---C <-- master 
\ 
    D---E---F <-- feature 

與基期獲得:

A---B---C---D'---E'---F' <-- master 

爲了讓樹枝回舊的國家,這樣做:

git checkout -b feature 
git rebase --onto A C feature 
git checkout master 
git reset --hard C