2011-05-13 43 views
21

原標題:混帳 - 更新沒有改變混帳 - 錯誤藏匿流行期間後合併衝突

目前,我試圖更新沒有被改變了一個Git倉庫中的所有文件中的所有文件。比方說,比如我有:

  • test1.py
  • test2.py而這兩個文件已被遠程修改

test1.py已在本地修改。現在,我想:

git stash 
git pull 
git stash pop 

它恢復了我的變化,讓我說,我需要合併test1.py警告。到現在爲止還挺好。當我嘗試再次執行相同的過程時(在兩個文件再次被改變之後)出現問題。 Git現在說

unmerged (6b126638f7c63aa648609afa60ab972a2403502b) 
fatal: git-write-tree: error building trees 
Cannot save the current index state 

這讓我有點難過。它只是想要一個簡單的事情:更新我沒有改變的所有文件。以後我會照顧合併。

+0

還有一點需要注意的是:在Git中,你並沒有真正分手提交。當你拉時,無論你是否改變了這些文件,你都會得到所有的改變。在應用(彈出)隱藏的更改後,最終將結合更改(通過合併,在幕後)。只更新你沒有改變的文件的目標並沒有多大意義。 – Cascabel

回答

27

您解決了文件中的衝突(也許?請參閱腳註),但Git不知道您是否完成了。你必須表明你已經完成了解決衝突。 (否則,如果它讓你繼續前進,並且你沒有真正解決它,你可以找到各種方式在腳下拍攝自己。)

據我所知,實現方式是:

git add <file>  # stage the resolved version, which marks it as resolved 
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree 

好像應該有一種方式在與update-index一次做兩件事,但它從一個快速瀏覽一下不是很明顯我。 (不過話說回來,對於實際的合併衝突,你從來要標記有衝突,因爲沒有分級的內容解決;它只是一個儲物箱,這產生了。)

而作爲VonC在他回答說,要這樣呢再次,使用git status應用存儲時,您可以輕鬆查看哪些事件會合並衝突。他們會以紅色列出(如果您有顏色)並說unmerged(或者deleted by us/them,如果是刪除/修改衝突)。

腳註:回想一下你的問題,我實際上無法確定你是否修復了衝突 - 你剛纔說「迄今爲止這麼好」。您看到的「警告」實際上意味着立即解決衝突的建議。試圖將你所帶來的變化與你藏起來的變化結合起來,就會產生衝突。你必須解決這個衝突,並讓你的工作樹進入一個一致的狀態,然後才能以任何方式繼續前進。像處理合並衝突一樣處理它 - 查看文件,找到衝突標記,找出要保留的內容! (然後回頭看看上面如何完成。)

+0

沒有馬上看到你的答案。 +1,以便遵循明確的程序。 – VonC

+0

我試圖按照這個。在你建議的命令後,我再次嘗試'git stash pop',但它仍然不起作用。現在它說「錯誤:您的本地更改以下文件將被合併覆蓋:」 –

+0

我有@Dave Cohen相同的問題。我能夠通過使用'git checkout -f '來解決它,它(警告!)拋出任何本地更改。 – James

2

這應該意味着你的第二個存儲沒有工作,因爲仍然沒有解決合併。
看到這SO question它說明了一個藏匿處相同的錯誤消息。

thread confirms樹不能包含未合併的文件。

You have a tree with unmerged entries.
Why don't you look into the issue and solve it?
A simple " git status " should show you what are the unmerged entries. A simple look at those files should show you conflict markers.

Resolve the issue, commit, continue.