我有一个奇怪的问题,git的合并功能,我以前从未见过。我正在将一些更改从分支合并到master
,并且git似乎一直遇到一个特定文件的问题。
它基本上将内容合并到看似随机的地方。这个文件合并的最后几次发生了。
以下是我对另一个分支(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行,所以相对来说它并不太远,但仍然很奇怪。
为什么会发生这种情况或我能做些什么呢?这是一个经常被触摸的文件,所以它将不断合并。它在过去一年左右的开发中从未成为一个问题,所以我不确定会发生什么变化,但解决它会很棒。
答案 0 :(得分:1)
要检查两件事:
git rerere
记录下来。如果启用了元数据,可能会查看元数据吗?git merge
有一个标志会告诉它查看比默认情况更广泛的上下文,以防止错误匹配?