2013-10-17 295 views
0

在這裏我的情況: 我們有2人在C項目上工作,我們使用bitbucket和git作爲DVCS。 我們對這些系統真的很陌生,不太瞭解如何使用它。如果用戶A提交了修改,並且用戶B想要修改它,這裏是他得到的(btw。用戶B已經在使用一些不同的文件):Git合併衝突的文件時拉

$ git的拉原點主

錯誤:您當地的下列文件中的更改將被合併覆蓋:

  • 斌/ APP.EXE
  • 斌/ App.pdb
  • App.csproj

我不在乎覆蓋兩個第一文件,因爲它們總是不同的,當我們編譯了,我不在乎來取代它,但如果我們的第三個可能是巨大的可以合併它。

我們一直在網上搜索,只發現用戶B應該重置其回購..這是非常愚蠢的,因爲他已經修改了文件,他會失去。

那麼什麼是合併所有這些文件的解決方案?

謝謝!

+0

爲什麼你甚至跟蹤構建結果(即.exe文件)?我想我會建議刪除那些跟蹤 - 只跟蹤你的源代碼和其他東西,如足夠重建其餘的makefile。 – twalberg

回答

1

您必須執行類似$ git stash的操作來存儲您的更改,然後從遠程存儲庫中提取更改,然後重疊您必須執行的更改$ git stash pop。這樣做,您將擁有B已經提交的所有更改,並且一旦將更改彈出,您將獲得副本,並且您將安全地提交併將更改推送到遠程。

  1. $ git stash
  2. $ git pull origin master
  3. $ git stash pop

  4. 進行更改

  5. 階段他們,他們承諾並推動他們

如果您不想拉取更改,則可以始終先執行fetch,然後再執行merge僅打算打印的文件。

我已經回答了上拉類似的問題取,合併這裏希望它有助於:https://stackoverflow.com/a/19296457/981616

0

我的解決辦法是:

git checkout bin/App.exe 
git checkout bin/App.pdb 

以上兩個命令將重置這些變化文件,那麼我會:

git stash 

This c ommand是要暫時藏匿我的變化,那麼我就可以這樣做:

git pull origin master 

拉力假設去沒有任何合併衝突,如果從用戶B以前提交不會做任何衝突,那麼你就可以回來與通過命令隱藏更改:

git stash pop 

如果合併衝突發生,您必須解決它們。

0

另一種解決方案比較快,但比存儲更不優雅的解決方案是用戶B提交他的本地更改以便能夠從遠程獲取更改。

git add -A 
git commit -m "Commit before pull" 

之後,用戶B可以拉沒有問題

0

我看到這已經回答了,但我認爲的一些提示可能是你的情況是有用的。

  1. 不要在您的git倉庫中包含* .exe。跟蹤它們毫無意義,如果你們其中一個人有不同的編譯器版本,他們可能會改變。
  2. 將* .exe文件添加到.gitignore。在你的git repo根文件夾中,如果文件不存在,則創建一個文件.gitignore,並在其中添加*.exe表達式。
  3. 要刪除已添加*.exe文件,使用git rm -r --cached '*.exe'
  4. 則應該同樣添加表達式*.o用於任何C編譯輸出文件,以及另一個用於*.pdb

至於無視當地的變化,@烏代的答案几乎總結起來 - 你需要做一個git stash,然後做一個git pull origin master。然後一個git stash pop

儘管最後的git stash pop語句附有caveat,但在合併衝突的情況下,您需要顯式刪除隱藏的條目。