2011-07-29 26 views
6

我想我用rebase壓縮了最後的40次提交。 我按照這個指南,以確保我沒有做任何愚蠢的事情 - http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.htmlGit Rebase似乎已經工作,但所有提交仍在日誌中顯示......我處於什麼狀態?

問題是,我想我做了一些愚蠢的事情。

(交互式)文本文件無法保存,所以看起來rebase失敗了,但是它給出的消息和其他一些事情表明它可能已經工作。

不知道我在哪裏或做什麼(甚至我的名字是什麼)。 這裏就是我所做的:

  • 我鍵入git的變基-i HEAD〜40
  • 的文本文件來了,這是我編輯,通過改變所有行要以「南瓜」,除了最上面的一個
  • 我在窗戶上,使用EditPad ...文件無法保存!哦,noes ...(只讀/權限?)。
  • 我將它保存到一個隨機目錄。
  • 命令行顯示某種成功(不幸的是我已經丟失了該消息)。我不知道如何才能成功或者知道我在哪裏保存的文件是...

  • git的變基--continue說「,沒有進行重訂?

  • 混帳引用日誌表明它的工作(從什麼我知道至少,這個詞「底墊」顯示的是在過去的40次多提交),例如:

    9992445 HEAD @ {8}:變基:報告工作

  • 但運行git log顯示所有40個提交我只是'重新設計'

這看起來不太好。有人知道我在什麼狀態嗎? 我是否處於僵局,這是殭屍嗎?

+0

你有其他分支指向你的重定義的提交嗎? – knittl

回答

14

如果rebase「todo list」無法保存,您的rebase就不起作用。

最簡單的方法壁球,許多提交是做git reset --soft HEAD~40,然後用git commit新的消息 - 假設你想壁球所有的人。

+2

+1我喜歡'git reset --soft'解決方案:) – knittl

+0

謝謝,這是一個很好的解決方案(我忘了要求提供技巧/解決方案,但你已經給了它) – PandaWood

+0

這個解決方案的工作,因爲它是我結束了爲了解決這個問題 – PandaWood

4

這個問題是關於git rebase -i行爲的一個有點令人驚訝的方面。如果您關閉編輯器窗口而不進行任何更改,則仍會發生重新綁定。 (這與彈出提交消息的編輯器時的動作完全不同,在沒有做出任何更改的情況下退出編輯器將中止提交。)

對於您的情況,由於您將交互式底座列表保存在其他位置,然後退出編輯器,git認爲你只是想像以前一樣重新應用所有這些提交 - 它無法告訴你保存在其他地方的文件。如果歷史在HEADHEAD~40之間是線性的,那麼歷史將完全相同(包括每個提交的對象名稱),但如果它是非線性的,則將重寫歷史記錄以使其爲線性的(因此將具有不同的歷史一些提交的對象名稱)。

您可能希望檢查reflog中HEAD具有相同的對象名稱(哈希)之前和之後的基地來檢查此。

雖然在版本我使用的,如果混帳可以告訴大家,其結果將是完全一樣的不打擾到真正重新應用提交和正好將在引用日誌中的單個條目。然而,你的情況顯然沒有發生這種優化,因爲你可以在reflog中看到每次提交的重新應用。

+0

謝謝,這就是我期待的那種解釋 – PandaWood

相關問題