Git последовательно объединяет один файл неправильно
У меня странная проблема с функцией слияния в 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 строк, так что, условно говоря, он не слишком далек, но все же он странный.
Есть идеи, почему это происходит или что я могу с этим поделать? Это часто затрагиваемый файл, поэтому он будет постоянно объединяться. Это никогда не было проблемой за последний год или около того развития, поэтому я не уверен, что изменилось, но было бы здорово решить эту проблему.
1 ответ
Две вещи, чтобы проверить:
- Поскольку это часто объединяемый файл, возможно, было выполнено некоторое неправильное слияние, а затем было выполнено резервное копирование в прошлом, это было записано
git rerere
, Может быть, посмотрите метаданные там, если у вас это включено? - Ваше форматирование кода может на самом деле сбрасывать со счетов вещи. Если в файле так много мест, которые могут соответствовать началу патча, особенно в том, в котором только добавляются новые строки, я мог легко запутаться, если он не учитывает достаточный контекст. Может быть, есть флаг
git merge
что скажет ему взглянуть на более широкий диапазон контекста, чем по умолчанию, чтобы избежать ошибочных совпадений?