我知道最簡單的方法是致電git reflog
查找分支的原始頭部,並且將舊的提交調用git reset
。如何反轉git rebase?
但某些情況reflog不可用,例如在另一臺PC上的存儲庫中。
任何方法來扭轉git rebase並設置爲舊的提交?
我知道最簡單的方法是致電git reflog
查找分支的原始頭部,並且將舊的提交調用git reset
。如何反轉git rebase?
但某些情況reflog不可用,例如在另一臺PC上的存儲庫中。
任何方法來扭轉git rebase並設置爲舊的提交?
我不知道我理解你的問題。如果我理解正確,你在回購上做了一些修改,編輯歷史,推送,拉到另一個存儲庫,並想從那裏取消歷史編輯? 這是不能做到的,因爲你沒有那裏的「原始」歷史。
正如你所說,git reflog
是要走的路,我不是爲什麼你不能使用它(除了我剛剛勾畫的場景)。你能編輯你的文章以提供更多信息嗎?
當你做rebase
你正在重寫歷史。分支會指向不同的提交。舊提交被刪除。您可以通過git fsck --lost-found
列出並嘗試恢復。但是,它們可用於垃圾收集,所以如果您之前已經完成了它們,它們可能會無法挽回地丟失。
只需使用(ref)ORIG_HEAD,它被設置爲在分支的內部復位階段之前指向分支尖端。 - 看到manual
所以checkout ORIG_HEAD
,創建一個新的分支名稱,它(停止它是一個分離的頭),你應該對你的方式(檢查它的所有gitk
連接,或者您favoutite漂亮的一個線圖命令)
在這種情況下,沒有辦法自動「撤銷」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