2

我对 git 的合并功能有一个奇怪的问题,这是我以前从未见过的。我正在将分支中的一些更改合并到mastergit 似乎一直在处理一个特定文件时遇到问题。

它基本上是将内容合并到看似随机的地方。最近几次合并此文件时发生过这种情况。

以下是我MyFile.cs在另一个分支(称为somebranch)上所做的更改:

-                service.UpdateUser(user);
+                service.UpdateUser(user, false);
...
-                User[] users = client.ImportPersonnel(a, b, c);
+                UserImportResults results = client.ImportPersonnel(a, b, c);
...
-                Response.Write(JsonConvert.SerializeObject(new { UserCount = users.Length }));
+                Response.Write(JsonConvert.SerializeObject(new { Added = results.NumAdded, Updated = results.NumUpdated }));

只需几行代码。

所以我这样做了:

git merge somebranch master

其中大部分是合并而没有冲突的。一些文件确实有冲突,但它们是有意义的。但是它所做的自动合并更改很MyFile.cs奇怪。例如,线

service.UpdateUser(user, false);

卡在以下master版本中间的某个随机位置MyFile.cs

                if (Request["X"] != null)
                {
                    CalculateSomething(Request["X"]);
                }

<<<<<<< HEAD
                if (Request["Y"] != null)
                {
                    CalculateSomething(Request["Y"]);
                }
=======
            try
            {
                client.UpdateUser(user, false);
>>>>>>> qaqc-release

                if (Request["Z"] != null)
                {
                    CalculateSomething(Request["Z"]);
                }

我不确定 git 如何确定如何将两个文件合并在一起,但我以前从未见过它这样做。它只发生在这个文件中。

它应该合并更改的位置和实际执行更改的位置相距 100 多行。然而,这个文件几乎有 5000 行长,所以相对而言它并不算太远,但仍然很奇怪。

任何想法为什么会发生这种情况或我能做些什么?这是一个经常被触及的文件,所以它会被不断地合并。在过去一年左右的开发过程中,这从来都不是问题,所以我不确定发生了什么变化,但如果能解决它会很棒。

4

1 回答 1

1

要检查的两件事:

  • 由于这是一个经常合并的文件,可能在过去执行了一些不正确的合并然后退出,这是由git rerere. 如果您启用了元数据,也许可以在那里查看元数据?
  • 您的代码格式实际上可能会丢掉东西。如果文件有很多地方可以匹配补丁的开头,尤其是只添加新行的地方,如果没有考虑足够的上下文,我很容易看到它变得混乱。也许有一个标志git merge 会告诉它比默认情况下查看更广泛的上下文,以防止错误匹配?
于 2015-06-14T18:23:22.033 回答