2012-07-12 104 views
4

我相信有一羣GIT用戶那裏誰是有這個問題的:如何恢復GIT中的錯誤修復?

  1. 從主建立一個新分支。我們稱之爲featureX
  2. 某處,在工作featureX時,你意識到你想以前的修正提交:
    • 你提交你的補丁。
    • 你做你的rebase和壁球/ fixup。
  3. 稍後,您想對您的主人進行重新整合以將最新更改納入功能X
  4. 因爲你的分支已經發生分歧而導致事情中斷(修正不是在主程序中完成的)。你有一個糟糕的一天。

這是我第二次發生這種情況。第一次,我沒有太多的歷史featureX,並簡單地做了一個新的分支關閉主。 你對此有何看法?你會如何解決這個問題?是否有可能git reset某個reflog?在這種情況下,我可以撤銷rebase並將修復提交回featureX(使用交互式底圖)。

我確定有不同的方法去做,但我想這是一個常見的問題。

回答

1

是的,你可以重置任何分支之前檢查出的任何東西(reflog)。因爲你的修補程序仍然在FeatureX中,所以底座與沒有修復的程序沒有什麼不同 - 只有當主程序的分歧與featureX分支中的任何提交發生衝突時才重要 - 修正或不修復。其次,當人們第一次學習git時,愛上了rebasing的迷人之旅。但我已經迴歸合併。它更簡單,它標誌着歷史的發展,並強制一些紀律。這是我的工作流程:http://dymitruk.com/blog/2012/02/05/branch-per-feature/

+0

感謝您的回答!但是,由於我在發生錯誤的重整後發生了其他更改(在reflog中),所以我不想僅僅回到rebase之前。我寧願讓那個特定的rebase撤消。換句話說,我可以重新設定reflog嗎? :)我目前沒有代碼庫,但可以在10個小時左右嘗試。關於整體重組;我將功能合併回集成分支。當我想要將最新的集成分支更改同步到功能分支時,我將重新分配。那不是你所做的? – Ztyx 2012-07-12 06:09:03

+0

你必須瞭解rebase的作用。它爲您想要移動到另一個起點的所有提交生成補丁。然後它逐個應用它們。爲了「撤銷」rebase,你只需再次rebase,但指定你想要的範圍提交的起點。語法是這樣的:'git rebase - 到新開始範圍結束範圍'。不,我很少變硬。如果你仔細閱讀我的文章,你會發現我從同一點開始了每件作品或功能。從那裏開始,任何操作都是將特徵合併到2個可以有時重置的特殊分支。 – 2012-07-12 07:37:23

+0

此外,谷歌「計算機科學家git」。您需要徹底瞭解歷史記錄如何存儲在git中。 – 2012-07-12 07:38:21