2011-11-30 125 views
0

我剛剛在我的git repo中犯了一個錯誤(愚蠢的編程,而Dayquil'd)。我的步驟是:如何恢復覆蓋git中的合併文件?

  1. 開始編輯file.txt的
  2. 確實含有file.txt的回購一個「混帳拉」。 File.txt是合併衝突的一部分。
  3. 對我在步驟1中打開的file.txt版本做了一些編輯。
  4. 保存了我在步驟1中打開的文件,覆蓋合併。
  5. ???

我需要解決步驟2中的合併,然後將該結果與步驟2中所做的編輯合併。我該怎麼做?

+0

你還必須在文件中的合併塊? –

+0

你有沒有完成合並? –

+0

@jcm,不,我沒有,如果是合併塊,你的意思是<<<<<等。 – mmr

回答

3

聽起來像你的問題只是你重寫了文件並丟失了合併衝突標記。處理這個問題最簡單的方法是使用git mergetool,它將使用GUI合併工具來處理衝突。該工具不依賴衝突標記文件的工作副本版本,它實際上使用您選擇的GUI工具重新合併原始文件。我強烈建議將它作爲您的常見合併衝突解決方案。

如果您確實希望文件返回衝突標記,則可以使用git checkout -m -- file.txt。這將重新創建文件的合併衝突版本。請注意,您在步驟3和步驟4中所做的任何更改都將丟失。

如果要保存所做的本地更改,可以使用git diff :2:file.txt file.txt查看file.txt合併前副本與保存到磁盤的副本之間的差異。您可以將其傳輸到一個文件中,以便稍後在解決合併後重新創建您的更改,甚至可以使用git apply與文件一起作爲補丁應用(只要它不觸及合併改變)。

+0

@ KevinBallard--會favoretti的隱藏想法幫助保持步驟3和4的變化? – mmr

+0

@ mmr:可能不是。我不太清楚'git stash'會以你當前的狀態運行它,因爲我不太確定'git diff - file.txt'實際上會以你當前的狀態打印。您可能會嘗試像'git diff:2:file.txt file.txt'這樣的*,它可能會在您之前版本的file.txt(合併之前)和您保存到磁盤的當前版本之間給出一個差異,但是我不能確定沒有測試(並且我沒有合適的衝突方便測試)。如果確實有效,您可以將其傳輸到文件以保存。 –

+0

@mmr:是的,'git stash'會在當前狀態下出錯。 'git diff'將會打印一個衝突風格的差異,這是非常令人困惑的。然而'git diff:2:file.txt file.txt'將會打印出你想要的,這就是你所做的改變。 –

1

嘗試這樣做:

git checkout --merge -- file.txt 
+0

如果這樣做我認爲它確實如此,那真是太棒了。 –

+1

請注意,這與'git checkout -m - file.txt'完全一樣,我在回答中提出了這個建議。 –