解决与二进制文件的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
相关文章
相关标签/搜索