2014-02-11 188 views
6

我正在做很長的提交git rebase。我不小心--skipped一個承諾,我遇到了一些衝突。我應該完成git rebase --continue撤銷git rebase --skip - 在rebase期間重新應用提交

有沒有辦法在這個重組階段期間重新應用此先前的提交,然後繼續進行rebase?我看到

一種方法是

  1. 創建的最後一個分支提交停在這一點上,底墊這是正確應用
  2. 重啓底墊開始與先前跳過的提交。

或者我可以做一個櫻桃選擇,而處於rebase階段?

回答

8

我找到了一種方法,其「爲我工作」:

在衍合很多事情在.git/rebase-apply -path正在發生。其中有一個文件叫nextnext包含的數字對應於駐留.git/rebase-apply-path的文件。該文件包含有關當前正在處理的提交的信息。例如:

$ cat .git/rebase-apply/next 
0260 
$ less .git/rebase-apply/0260 
<info about the commit which is currently processed (and has conflicts) 

Git似乎保留了與上述文件一樣被忽略的提交。而與已經應用的提交相對應的文件不再存在。我意外跳過的提交被稱爲0259,該文件仍然存在。

這裏是我做過什麼:

$ echo "0258" > .git/rebase-apply/next 

有了,我說,目前第二百五十八提交處理混帳(這之前的正確應用)。然後我做了

$ git rebase --skip 

通知Git忘記這一個,瞧,我可以再次跳過的工作承諾,糾正衝突和--continue。它工作。

+0

這在最近版本的Git改變了一點,但我仍然能夠使其通過調整這些文件的工作:'混帳底墊,todo'和按照上面的想法「上」。 – goncalossilva

+0

使用git版本'1.9.4.msysgit.1'我可以通過Patrick B.的方法獲得成功,我既沒有使用'git-rebase-todo'也沒有''到''。 – codingdave

+0

恐怕在git rebase --skip之後,這是不可能的。至少對於我來說。我的「.git」文件夾中沒有「rebase-apply」 – riroo

4

Git非常棒,因爲它可以保存基本上所有提交的日誌。

  1. 找到你的承諾在 「的.git /日誌/ HEAD」,打開一個文本編輯器

  2. 發現在頭文件的SHA

    3c8c ...... 2260dc ...全名{[email protected]} 1471276956 -0600提交:保存試用版1,2,3

  3. 類型(注類型足夠的沙這樣混帳知道拉哪一個):

    git的結帳-b恢復2260d ...

見鏈接以供參考:http://blog.screensteps.com/recovering-from-a-disastrous-git-rebase-mistake

+0

您節省了2天的工作時間! –