2011-06-27 86 views
10

我做了一個git pull從我的上游乾淨的工作目錄,它給我提出了合併衝突。我花了大約一個小時手動重置他們,認爲我已經搞砸了,並再次發生。乾淨的目錄git拉有合併衝突

這是git中的錯誤嗎?我對此知之甚少,所以我完全願意接受我對自己做的這件事。

這裏是我的輸出被截斷(它發生約9個文件,但我想,以節省空間和文件名已更改爲保護無辜者):

$ git status 
# On branch master 
nothing to commit (working directory clean) 
$ git pull 
Auto-merged xxxx/xxxx/xxxx.xxx 
CONFLICT (content): Merge conflict in xxxx/xxxx/xxxx.xxx 
Automatic merge failed; fix conflicts and then commit the result. 

我使用的Solaris 11 Express中與包默認的git。

$ uname -a 
SunOS xxxx 5.11 snv_151a i86pc i386 i86pc Solaris 
$ git --version 
git version 1.5.6.5 
$ pkg list git 
NAME (PUBLISHER)        VERSION   STATE  UFOXI 
developer/versioning/git      1.5.6.5-0.151.0.1 installed ----- 

我發現這個問題:Git pull fails: You have unstaged changes. Git status: nothing to commit (working directory clean),這似乎是最接近的,但有一個不令人滿意的答案。

如何在不刪除我的整個存儲庫並製作新的克隆的情況下通過此操作?

回答

15

您的工作目錄可能是乾淨的,但您有一個或多個本地提交的不在服務器上的提交。當你拉動時,git會嘗試將這些本地提交與服務器上的提交合並,但由於它們修改了代碼的相同區域,所以它們會發生衝突。

你選擇這裏基本上可以歸結爲:

  1. Fix the conflicts.你告訴Git是如何處理衝突的變化,並繼續前進。
  2. 根據並修復衝突,使用git pull --rebase。這與1沒有多大區別,但如果您的更改從未發佈過(即從未推過),這可能會爲您提供更清晰(線性)的歷史記錄。
  3. 放棄您的本地更改並使用遙控器,git reset --hard remotename/remotebranch。這將失去您在本地執行的任何更改,但不會推送到其他地方。
+1

我沒有對任何分支本地提交獲得最新的代碼,但是#3的伎倆,謝謝。 – bahamat

+4

有用的答案,幫助我找到了走出雜草的路。就我而言,我在一個分支上運行了'git rebase master'。然後我遇到了如上所述的合併衝突。 用'git merge --abort'和你的'git pull --rebase'解決。謝謝! – wndxlori

0

拉,解決合併衝突並提交?即使你有一個乾淨的工作目錄,如果你已經做了一些工作,這與傳入的改變相沖突,你會遇到合併衝突。

0

添加到bdonlan答案,當你有一些提交(在你的本地庫),它可以發生,但遠程倉庫領先(有一些進展比較到本地提交的文件)。

我只是因爲這些衝突而無法推動或拉動時卡住了。

試圖做'rebase'或'重置 - hard'沒有運氣。

唯一的解決方案爲我是回去一次提交拉;

按照下面的步驟:

警告:這是破壞性操作,這將導致你失去首先你最後一次修改這個代碼,所以備份您的更改!

  1. 使用「git的日誌在您的本地存儲庫,並比較這對提交日誌遙控器上的 - 瞭解哪些您提交的一個不推
  2. 使用」的git的復位 - 硬「回到過去的時間代碼適合遠程倉庫(我用」混帳的復位 - 硬頭^「以故意輸掉我以前提交)
  3. 現在」 混帳拉'將工作;用它來從遠程服務器