我一直在Windows上使用Git(msysgit)来跟踪我一直在做的一些设计工作的变化 .
今天我一直在使用不同的PC(使用远程回购 brian
),我现在正尝试将今天完成的编辑合并到我的笔记本电脑上的常规本地版本中 .
在我的笔记本电脑上,我使用 git pull brian master
将更改提取到我的本地版本 . 除了主要的InDesign文档之外,一切都很好 - 这显示为冲突 .
PC上的版本( brian
)是我想要保留的最新版本,但我不知道哪些命令告诉repo使用这个版本 .
我试着将文件直接复制到我的笔记本电脑上,但这似乎打破了整个合并过程 .
谁能指出我正确的方向?
9 回答
你也可以克服这个问题
这会导致
git
创建冲突二进制文件的本地副本并在其上生成默认编辑器:{conflicted}.HEAD
{conflicted}
{conflicted}.REMOTE
显然,您无法在文本编辑器中有用地编辑二进制文件 . 而是在不关闭编辑器的情况下将新的
{conflicted}.REMOTE
文件复制到{conflicted}
上 . 然后,当您关闭编辑器时,git
将看到未修饰的工作副本已更改,并且您的合并冲突以通常的方式解决 .要通过将版本保留在当前分支中来解决(忽略要合并的分支中的版本),只需添加并提交文件:
要通过使用您要合并的分支中的版本覆盖当前分支中的版本来解决,您需要首先将该版本检索到工作目录中,然后添加/提交它:
Explained in more detail
mipadi的回答对我来说不太有用,我需要这样做:
或者,保持合并版本:
然后
然后我又能够做“git mergetool”并继续下一次冲突 .
对于这样的情况,
git checkout
接受--ours
或--theirs
选项 . 因此,如果您有合并冲突,并且您知道您只想要合并的分支中的文件,则可以执行以下操作:使用该版本的文件 . 同样,如果您知道您想要您的版本(不是合并的版本),您可以使用
你必须手动解决冲突(复制文件),然后提交文件(无论你是复制它还是使用本地版本),像这样
Git通常在合并后自动提交,但是当它检测到冲突时它本身无法解决,它会应用它想出的所有补丁,剩下的就是你手动解析和提交 . Git Merge Man Page,Git-SVN Crash Course或this博客条目可能会阐明它应该如何运作 .
Edit: 请参阅下面的帖子,您实际上不必自己复制文件,但可以使用
选择所需文件的版本 . 只有在需要两种版本的混合时,才需要复制/编辑文件 .
请将mipadis答案标记为正确答案 .
来自git checkout docs
我遇到了类似的问题(想要提交包含一些二进制文件的提交,这些文件在合并时会导致冲突),但是遇到了一个完全可以使用git完成的不同解决方案(即不必手动复制文件) . 我想我会把它包含在这里,所以至少我可以在下次需要时记住它 . :)步骤看起来像这样:
这将从远程存储库中获取最新的提交(您可能需要指定远程分支名称,具体取决于您的设置),但不会尝试合并它们 . 它在FETCH_HEAD中记录提交
这将获取我想要的二进制文件的副本,并使用从远程分支获取的版本覆盖工作树中的内容 . git不会尝试进行任何合并,因此您最终会得到远程分支中二进制文件的精确副本 . 完成后,您可以像平常一样添加/提交新副本 .
我遇到了两种策略,用于在Windows上使用Git管理二进制文件的差异/合并 .
Tortoise git允许您根据文件为不同的文件类型配置差异/合并工具扩展 . 见2.35.4.3 . 差异/合并高级设置http://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html . 当然,这种策略依赖于合适的差异/合并工具 .
使用git属性,您可以指定一个工具/命令将二进制文件转换为文本,然后让您的默认差异/合并工具执行此操作 . 见http://git-scm.com/book/it/v2/Customizing-Git-Git-Attributes . 本文甚至给出了使用元数据来区分图像的示例 .
我有两种策略都可以使用软件模型的二进制文件,但我们配备了togise git,因为配置很简单 .
如果二进制文件是 something more than a dll 或类似于图像或混合文件的东西(并且您不需要删除/选择一个文件或另一个文件),那么真正的合并将是:
我建议搜索面向你的二进制文件的diff工具,例如,有一些免费的图像文件
npm install _g imagediff IIRC来自https://github.com/uber/image-diff
或python https://github.com/kaikuehne/mirror.git
还有其他人
并比较它们 .
如果没有用于比较文件的差异工具,那么如果你有bin文件的 original generator (即, there exist an editor 为它...就像blender 3d一样,你可以手动检查这些文件,也可以看到日志,并询问对方应该包括的内容)并使用https://git-scm.com/book/es/v2/Git-Tools-Advanced-Merging#_manual_remerge输出文件
$ git show :1:hello.blend > hello.common.blend $ git show :2:hello.blend > hello.ours.blend $ git show :3:hello.blend > hello.theirs.blend