Git Lab pull from origin master - (remote repository),如何解决合并冲突?

Git Lab pull from origin master - (remote repository), how do i resolve Merge Conflicts?

我发现文件中有很多合并冲突并不一定很重要。有没有办法从远程存储库中提取并忽略这些文件?

部分合并错误如下:

CONFLICT (content): Merge conflict in FoodSpot/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Auto-merging FoodSpot/bin/FoodSpot.pdb
CONFLICT (content): Merge conflict in FoodSpot/bin/FoodSpot.pdb
Auto-merging FoodSpot/bin/FoodSpot.dll
CONFLICT (content): Merge conflict in FoodSpot/bin/FoodSpot.dll
Auto-merging FoodSpot/FoodSpot.csproj
CONFLICT (content): Merge conflict in FoodSpot/FoodSpot.csproj
Auto-merging FoodSpot/Additional_Scripts/distributor-script.js
Auto-merging .vs/FoodSpot/v16/.suo
CONFLICT (content): Merge conflict in .vs/FoodSpot/v16/.suo
Automatic merge failed; fix conflicts and then commit the result.

Is there a way to pull from the remote repository and ignore those files?

这个问题很容易回答:不。1但这不是真正正确的问题!

I have a lot of merge conflicts in files that i don't find to be necessarily important.

合并冲突 当“你”和“他们”对 matched-up作为“同一文件”。如果您想保留其中一个或多个文件的您的版本,或者获取其中一个或多个文件的他们的版本,这很容易做到。这就是合并冲突的解决方案:您已经通过丢弃一个版本并采用另一个版本来“解决”冲突。

确信这是解决冲突的正确方法,因为从现在开始,Git将相信这是解决冲突的正确方法.

下面是正在发生的事情的说明,以及 Git 命令将解决冲突:

          I--J   <-- yourbranch (HEAD)
         /
...--G--H
         \
          K--L   <-- theirbranch

这里图表中的每个大写字母代表一个丑陋的大 Git 哈希 ID,因此代表现在在您的存储库中的提交。请记住,每个提交都包含 Git 知道的每个文件的完整快照——因此提交 G 有一个 FoodSpot/bin/FoodSpot.pdb 的副本,提交 H 有一个副本,等等提交 IJKL每个 提交都有此文件的副本。 (还好,一模一样的都是de-duplicated,所以没那么多space。)

(注意:theirbranch 这里可能实际上是 origin/yourbranch 或其他名称。Git 不关心 名称 ,而是关于 提交 。名称只是用于定位提交。)

这里出现 合并冲突 的原因是此文件在 H 中的副本与 J 中的副本不同,即您在您的分支上对该文件进行了一些更改。同时,这个文件在H中的副本与L中的副本不同,即他们制作了一些在 他们的 分支上更改此文件。 Git 无法合并这两组更改,以便将合并的更改应用于 H.

中的文件副本

Git 需要您向 Git 提供此文件 FoodSpot/bin/FoodSpot.pdb 正确 副本进入合并提交,您将完成合并过程:

          I--J
         /    \
...--G--H      M   <-- yourbranch (HEAD)
         \    /
          K--L   <-- theirbranch

提交 M 包含最终的合并结果。

如果您希望新提交 MFoodSpot/bin/FoodSpot.pdb 的副本与您的提交 J 中的副本相匹配,请告诉 Git:

git checkout HEAD -- FoodSpot/bin/FoodSpot.pdb

如果您希望新提交 MFoodSpot/bin/FoodSpot.pdb 的副本与他们的提交 L 中的副本相匹配,告诉 Git:

git checkout MERGE_HEAD -- FoodSpot/bin/FoodSpot.pdb

这两个操作都会替换该文件的 work-tree 副本和 Git 的索引副本,并在此过程中将冲突标记为“已解决”。


1实际上,您可以通过.gitattributes设置合并驱动程序 ].不要这样做!这是一个陷阱。如果你有一个文件你改变了他们没有,并且你设置了一个合并驱动程序来采用“他们的”版本,驱动程序不会开火。使用 --no-commit 手动合并,即使没有冲突,也要确保您使用文件的“他们的”版本。


至少其中一些文件可能根本不应该提交

以上其中一个文件名以 .dll 结尾。 DLL 通常是 构建产品 ,而不是源文件。一个里面有obj;这些通常是构建产品。有几个里面有bin,Git不太擅长处理二进制文件。

不过,从意外提交的存储库中删除构建产品时存在问题。由于无法更改现有提交,如果您 new 提交 lack 文件,则包含文件的旧提交与新提交之间的任何比较新的没有,显示文件被删除(旧->新)或添加(新->旧)。

这是否是一个问题,如果是,您应该如何处理,是不同的问题,但是 Git 永远不能自行合并二进制文件。 Git 的合并代码只理解——好吧,认为 它理解——纯文本,然后只理解 line-by-line。 Plain-text XML-structured 个文件将由 Git mis-merged 个。如果你有这样的文件,永远不要相信 Git 的合并,即使 Git 认为没有任何冲突。确保测试或检查每个文件。