解決與二進制文件的Git衝突

我一直在Windows上使用Git(msysgit)來跟蹤我一直在作的一些設計工做的變化。 git

今天我一直在使用不一樣的PC(使用遠程repo brian ),我如今正嘗試將今天完成的編輯合併到個人筆記本電腦上的常規本地版本中。 編輯器

在個人筆記本電腦上,我使用git pull brian master將更改提取到個人本地版本。 除了主要的InDesign文檔以外,一切都很好 - 這顯示爲衝突。 fetch

PC上的版本( brian )是我想要保留的最新版本,但我不知道命令告訴repo使用這個版本。 spa

我試着將文件直接複製到個人筆記本電腦上,但這彷佛打破了整個合併過程。 設計

誰能指出我正確的方向? code


#1樓

我遇到了相似的問題(想要提交包含一些二進制文件的提交,這些文件在合併時會致使衝突),可是遇到了一個徹底可使用git完成的不一樣解決方案(即沒必要手動複製文件)。 我想我會把它包含在這裏,因此至少我能夠在下次須要時記住它。 :)步驟看起來像這樣: 索引

% git fetch

這將從遠程存儲庫中獲取最新的提交(您可能須要指定遠程分支名稱,具體取決於您的設置),但不會嘗試合併它們。 它記錄了FETCH_HEAD中的提交 文檔

% git checkout FETCH_HEAD stuff/to/update

這將獲取我想要的二進制文件的副本,並使用從遠程分支獲取的版本覆蓋工做樹中的內容。 git不會嘗試進行任何合併,所以您最終會獲得遠程分支中二進制文件的精確副本。 完成後,您能夠像日常同樣添加/提交新副本。 get


#2樓

你也能夠克服這個問題 it

git mergetool

這會致使git建立衝突二進制文件的本地副本並在其上生成默認編輯器:

  • {conflicted}.HEAD
  • {conflicted}
  • {conflicted}.REMOTE

顯然,您沒法在文本編輯器中有用地編輯二進制文件。 相反,你複製新{conflicted}.REMOTE文件覆蓋{conflicted} ,但不關閉編輯器。 而後,當您關閉編輯器時, git將看到未修改的工做副本已更改,而且您的合併衝突以一般的方式解決。


#3樓

git checkout docs

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...

--ours
--theirs
檢查索引中的路徑時,請查看第2階段( ours )或#3( theirs )未合併路徑。

因爲先前失敗的合併,索引可能包含未合併的條目。 默認狀況下,若是您嘗試從索引中檢出此類條目,則結賬操做將失敗,而且不會檢出任何內容。 使用-f將忽略這些未合併的條目。 合併的特定一側的內容能夠經過使用--ours--theirs來檢查索引。 使用-m ,能夠放棄對工做樹文件所作的更改,以從新建立原始衝突的合併結果。


#4樓

要經過將版本保留在當前分支中來解決(忽略要合併的分支中的版本),只需添加並提交文件:

git commit -a

要經過使用您要合併的分支中的版本覆蓋當前分支中的版原本解決,您須要首先將該版本檢索到工做目錄中,而後添加/提交它:

git checkout otherbranch theconflictedfile
git commit -a

更詳細地解釋


#5樓

對於像這樣的狀況, git checkout接受--ours--theirs選項。 所以,若是您有合併衝突,而且您知道您只想要合併的分支中的文件,則能夠執行如下操做:

$ git checkout --theirs -- path/to/conflicted-file.txt

使用該版本的文件。 一樣,若是您知道您想要您的版本(不是合併的版本),您可使用

$ git checkout --ours -- path/to/conflicted-file.txt
相關文章
相關標籤/搜索