Git一直错误地合并一个文件

时间:2015-06-14 17:07:01

标签: git merge merge-conflict-resolution automerge

我有一个奇怪的问题,git的合并功能,我以前从未见过。我正在将一些更改从分支合并到master,并且git似乎一直遇到一个特定文件的问题。

它基本上将内容合并到看似随机的地方。这个文件合并的最后几次发生了。

以下是我对另一个分支(MyFile.cssomebranch所做的更改:

-                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行,所以相对来说它并不太远,但仍然很奇怪。

为什么会发生这种情况或我能做些什么呢?这是一个经常被触摸的文件,所以它将不断合并。它在过去一年左右的开发中从未成为一个问题,所以我不确定会发生什么变化,但解决它会很棒。

1 个答案:

答案 0 :(得分:1)

要检查两件事:

  • 由于这是一个经常合并的文件,可能会执行一些不正确的合并,然后在过去退出,这已被git rerere记录下来。如果启用了元数据,可能会查看元数据吗?
  • 您的代码格式化可能实际上是在抛弃。如果文件有很多可以匹配补丁开头的地方,特别是那些只添加新行的地方,如果它没有考虑足够的上下文,我很容易就会感到困惑。也许git merge有一个标志会告诉它查看比默认情况更广泛的上下文,以防止错误匹配?