当前位置:  开发笔记 > IOS > 正文

解决与二进制文件的Git冲突

如何解决《解决与二进制文件的Git冲突》经验,为你挑选了7个好方法。

我一直在Windows上使用Git(msysgit)来跟踪我一直在做的一些设计工作的变化.

今天我一直在使用不同的PC(带远程仓库brian),现在我正在尝试将今天完成的编辑合并到我笔记本电脑上的常规本地版本中.

在我的笔记本电脑上,我习惯git pull brian master将更改添加到我的本地版本中.除了主要的InDesign文档之外,一切都很好 - 这显示为冲突.

PC(brian)上的版本是我想要保留的最新版本,但我不知道哪些命令告诉repo使用这个版本.

我试着将文件直接复制到我的笔记本电脑上,但这似乎打破了整个合并过程.

谁能指出我正确的方向?



1> mipadi..:

git checkout对此类案件接受--ours--theirs选择.因此,如果您有合并冲突,并且您知道您只想要合并的分支中的文件,则可以执行以下操作:

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

使用该版本的文件.同样,如果您知道您想要您的版本(不是合并的版本),您可以使用

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


在使用--ours之前,我必须在文件上运行'git reset HEAD path/to/conflicted-file.txt',否则它似乎没有任何效果.
注意:你仍然想做"git add*conflicted-file.txt*"和"git commit".很简单,当我尝试它时,提交消息预先填充了有关冲突的注释.
在解释这个主题时总是缺少几个要点.在进行rebase而不是merge时,` - their`和`--ours`的含义是交换的,即--their ==当前签出的分支,而--ours是分支,通常是远程分支或路径spec你试图合并到当前分支.`[space] - [space]`选项消除了分支名称和路径规范之间的路径规范,它们恰好存在于同一名称(例如,现有分支名称为"abc",目录存在称为"abc") .
@Zitrax运行`git checkout --ours`后你有没有把文件区分开来?手册页建议(恕我直言)checkout --ours/ - 他们将从"修改后的两个需要合并"列表中删除更改并将其添加到索引中,我认为这是不正确的.我相信你需要在结账后运行`git add`.

2> VolkA..:

你必须手动解决冲突(复制文件)然后提交文件(无论你是复制它还是使用本地版本),像这样

git commit -a -m "Fix merge conflict in test.foo"

Git通常在合并后自动提交,但是当它检测到冲突时它本身无法解决,它会应用它想出的所有补丁,剩下的就是让你手动解析和提交.在Git的合并手册页中,针对Git SVN速成班或此博客条目可能揭示它是如何工作的一些情况.

编辑:请参阅下面的帖子,您实际上不必自己复制文件,但可以使用

git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt

选择所需文件的版本.只有在需要两种版本的混合时,才需要复制/编辑文件.

请将mipadis答案标记为正确答案.



3> RobM..:

你也可以克服这个问题

git mergetool

这会导致git创建冲突二进制文件的本地副本并在其上生成默认编辑器:

{conflicted}.HEAD

{conflicted}

{conflicted}.REMOTE

显然,您无法在文本编辑器中有用地编辑二进制文件.而是{conflicted}.REMOTE{conflicted}不关闭编辑器的情况下复制新文件.然后,当您关闭时,编辑器git将看到未修饰的工作副本已更改,并且您的合并冲突以常规方式解决.


这个答案完全值得更多的赞成.
如果文件很大或你根本不想冒险在文本编辑器中打开二进制文件,你可以在mergetool提示符下点击ctrl + c("点击返回以启动合并解析工具")并且git将离开额外的文件到位.然后您可以修改它们或将它们合并到外部工具中(对于像LibreOffice/OpenOffice/MSWord这样的二进制文档格式很有用)并将结果保存回原始文件名.要通知git冲突已解决,`git add`原始文件名,然后您就可以完成合并提交.

4> Joshua Flana..:

要通过将版本保留在当前分支中来解决(忽略要合并的分支中的版本),只需添加并提交文件:

git commit -a

要通过使用您要合并的分支中的版本覆盖当前分支中的版本来解决,您需要首先将该版本检索到工作目录中,然后添加/提交它:

git checkout otherbranch theconflictedfile
git commit -a

更详细地解释



5> kris..:

mipadi的回答对我来说不太有用,我需要这样做:

git checkout --ours path/to/file.bin

或者,保持合并版本:

git checkout --theirs path/to/file.bin

然后

git add path/to/file.bin

然后我能够再次执行"git mergetool"并继续下一次冲突.



6> 小智..:

来自git checkout文档

git checkout [-f|--ours|--theirs|-m|--conflict=

我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有