题
我已经做on Windows(msysgit)跟踪变化对于一些设计工作我已经做。
今天我已经工作一个不同的电脑(远程仓库 brian
)和我现在正试图合并编辑完成今天回到我的正常的当地版本,我的笔记本电脑。
在我的笔记本电脑,我们使用 git pull brian master
拉变成我的当地版本。一切都很好除了主要的书面文件-这表示作为一个冲突。
该版本在PC(brian
)是最新的一个,我想保持,但我不知道什么是命令告诉库使用这一个。
我试图直接将文件复制跨到我的笔记本电脑但是,这似乎打破整个合并过程。
任何人都可以点我在正确的方向?
解决方案
git checkout
接受--ours
或--theirs
选项。因此,如果您有合并冲突,并且您知道您只想要合并的分支中的文件,则可以执行以下操作:
$ git checkout --theirs -- path/to/conflicted-file.txt
使用该版本的文件。同样,如果您知道您想要您的版本(不是合并的版本),您可以使用
$ git checkout --ours -- path/to/conflicted-file.txt
其他提示
您必须手动解决冲突(复制文件)然后提交文件(无论您是复制文件还是使用本地版本),如此
git commit -a -m "Fix merge conflict in test.foo"
Git通常在合并后自动提交,但是当它检测到冲突时它本身无法解决,它会应用它想出的所有补丁,剩下的就是你手动解析和提交。 Git Merge Man Page , Git-SVN Crash Course 或这篇博客文章可能会说明它应该如何运作。
编辑:请参阅下面的帖子,您实际上不必自己复制文件,但可以使用
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
选择所需文件的版本。只有在想要两种版本的混合时才需要复制/编辑文件。
请将mipadis答案标记为正确答案。
你也可以克服这个问题
git mergetool
其中的原因 git
创建地方副本的矛盾二和产卵默认的编辑上他们:
{conflicted}.HEAD
{conflicted}
{conflicted}.REMOTE
显然你不能有效地编辑的二进制文件的文件,在一个文本编辑器。而不是你复制新的 {conflicted}.REMOTE
文件通过 {conflicted}
没有关的编辑。然后当你靠近编辑 git
会看到的未装饰工作的复制已改变的和你的合并解决冲突在通常的方式。
要通过将版本保留在当前分支中来解决(忽略要合并的分支中的版本),只需添加并提交文件:
git commit -a
要通过使用您要合并的分支中的版本覆盖当前分支中的版本来解决,您需要先将该版本检索到您的工作目录,然后添加/提交它:
git checkout otherbranch theconflictedfile
git commit -a
git checkout --ours path / to / file.bin
或者,为了保持合并版本:
git checkout - 他们的路径/到/ file.bin
然后
git add path / to / file.bin
然后我能够做到<!>“git mergetool <!>”;再次继续下一场冲突。
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
<强>
--ours
强>结果 的--theirs
强>结果 检查索引中的路径时,请查看阶段#2(ours
)或#3(theirs
)以了解未合并路径。由于之前的合并失败,索引可能包含未合并的条目。默认情况下,如果您尝试从索引中检出此类条目,则结帐操作将失败,并且不会检出任何内容。使用
-f
将忽略这些未合并的条目。可以使用-m
或<=>从索引中检出合并的特定一侧的内容。使用<=>,可以放弃对工作树文件所做的更改,以重新创建原始冲突的合并结果。
此过程用于在向Github提交拉取请求后解决二进制文件冲突:
- 因此,在Github上,您发现您的拉取请求与二进制文件存在冲突。
- 现在回到本地计算机上的同一个git分支。
- 您(a)再次重新制作/重新构建此二进制文件,并(b)将生成的二进制文件提交到同一个git分支。
- 然后你再次将这个git分支推送到Github。 醇>
在Github上,根据您的请求,冲突应该消失。
我遇到了类似的问题(想要提交包含一些二进制文件的提交,这些文件在合并时会导致冲突),但遇到了一个完全可以使用git完成的不同解决方案(即不必手动复制文件) 。我想我会把它包含在这里,所以至少我可以在下次需要时记住它。 :)步骤看起来像这样:
% git fetch
这将从远程存储库中获取最新的提交(您可能需要指定远程分支名称,具体取决于您的设置),但不会尝试合并它们。它记录了FETCH_HEAD中的提交
% git checkout FETCH_HEAD stuff/to/update
这将获取我想要的二进制文件的副本,并使用从远程分支获取的版本覆盖工作树中的内容。 git不会尝试进行任何合并,因此您最终会得到远程分支中二进制文件的精确副本。完成后,您可以像平常一样添加/提交新副本。
我遇到过两种策略,用于在Windows上使用Git管理二进制文件的差异/合并。
-
Tortoise git允许您根据文件扩展名为不同的文件类型配置差异/合并工具。见2.35.4.3。差异/合并高级设置 http://tortoisegit.org/docs/tortoisegit/tgit-挖settings.html 。当然,这种策略依赖于合适的差异/合并工具。
-
使用git属性,您可以指定一个工具/命令将二进制文件转换为文本,然后让您的默认差异/合并工具执行此操作。请参阅 http://git-scm.com/book/it/ V2 /自定义 - 针对Git的Git的属性。本文甚至给出了使用元数据来区分图像的示例。
醇>
我有两种策略都可以使用软件模型的二进制文件,但我们配备了togise git,因为配置很简单。
如果是二进制的 更多的东西,比dll 或是可以 直接编辑 像一个像,或者一个混合文件(你不需要垃圾/选择一个文件或其他的)一个真正合并会有一些,如:
我建议搜索一个比较工具为导向的什么都是你的二进制文件,例如有一些免费的,为图像文件,例如
- npm install-g imagediff请参考从 https://github.com/uber/image-diff
- 或蟒蛇 https://github.com/kaikuehne/mirror.git
- 有人在那里
并对它们进行比较。
如果没有差异的工具有比较文件,然后如果你有的 原来的发电机 bin文件(即, 存在着一个编辑 对它...像搅拌机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
我使用Git Workflow for Excel - https://www.xltrail。 com / blog / git-workflow-for-excel 应用程序来解决我的大多数二进制文件相关的合并问题。这个开源应用程序可以帮助我高效地解决问题,而无需花费太多时间,让我可以毫不费力地选择正确版本的文件。
我的情况好像是一个bug ....使用git 2.21.0
我做了拉...它抱怨二进制文件:
warning: Cannot merge binary files: <path>
Auto-merging <path>
CONFLICT (content): Merge conflict in <path>
Automatic merge failed; fix conflicts and then commit the result.
然后,这里的任何答案中没有任何内容导致任何输出都没有任何意义。
如果我查看我现在拥有的文件...这是我编辑过的文件。如果我这样做:
git checkout --theirs -- <path>
git checkout --ours -- <path>
我得到输出:
Updated 0 paths from the index
我还有我的文件版本。如果我然后结账,它会说1,但它仍然给我我的文件版本。
git mergetool说
No files need merging
和git status说
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
一种选择是撤消提交 ...但我很不走运,我有许多承诺,这个糟糕的是第一个。我不想浪费时间重复这一点。
所以要解决这个疯狂:
我跑了
git commit
丢失了远程版本,可能会浪费一些存储额外二进制文件的空间......然后
git checkout <commit where the remote version exists> <path>
让我回到远程版本
然后再次编辑文件...然后提交并推送,这可能意味着再次浪费空间与二进制文件的另一个副本。