2013-08-28 24 views
13

好的,所以我非常喜歡git rerere命令。雖然,除了讓它自動地記錄我的衝突併爲我解決它之外,我還沒有真正使用它。然而,我在相當大的轉型期間搞亂了我的一個衝突解決方案(用最新版本重新組裝了一個非常陳舊的功能分支)。撤消在rebase中完成的git rerere解析

feature -> a - b - c - d 

release -> e - f - g - h 

rebase/feature -> e - f - g - h - a' - b' - c' - d' 

因此,比如說b'有一個不正確的合併(感謝我!),我想重新記錄它。我會怎麼做?我已經看到了git checkout --conflict選項,在Rerere Your Boat中提到過,但我不太清楚它是如何工作的,以及它是否適用於此。也許我必須檢查合併衝突狀態並運行git rerere,一旦我正確地解決了這個衝突?

通常情況下,我只是承諾rebase分支的一角,但它是一個扔掉。我只是試圖提前處理衝突,所以當我與該功能團隊同步時,我們會盡量縮短所需時間。合理?

+0

誰想忘記一切'git的rerere'決議,@JánSáreník下​​http://stackoverflow.com/a/21635422/2816199評論可以是巨大的幫助。 – tomekwi

回答

18

您可以通過重新執行合併來讓rerere忘記記錄的合併分辨率,並允許rerere在工作樹中應用其記錄的分辨率。

您可以檢查出a',然後做一個git merge b重新進入這種情況(你可能會在一個分離的頭的結賬,因爲你指定的a'提交散,所以要知道,你是不是在分支上)。

然後使用git rerere forget FILE-WITH-BAD-MERGE指定記錄的衝突解決方案應該忘記的文件。

forget <pathspec>
重置其rerere記錄了在當前矛盾衝突的決議。

(從the Git documentation for git-rerere

+26

您也可以使用'rm -rf .git/rr-cache'完全清除rr緩存。 –

+4

^^這有助於'rerere忘記'沒有爲我做 – Dennis

+1

原作者被'git checkout --conflict'弄糊塗了。但是,如果您處於重建階段並且不想重新開始,那麼該選項就是正確的。有一個更熟悉的選項,'-m'。你可以通過'git checkout -m FILE-WITH-BAD-MERGE'來恢復文件中更爲熟悉的默認衝突標記。就好像你沒有將rerere的決議放在首位。 – Bluu