Я собирался опубликовать это на этом ТАКом вопросе.Потому что это первый, который появляется в Google.Но я подумал, что лучше написать этот вопрос как новый вопрос (в конце концов, это не форум).
Сначала я покажу вам эту картинку, чтобы получить представление о состоянии веток (очевидно, реальные сообщения коммитов былизаменено на конфиденциальность):
![commit nightmare](https://i.imgur.com/eS5ywWf.png)
Итак, после отслеживания каждого коммита я обнаружил, что виновным было последнее слияние, выполненное моим коллегой (тот, что сверху).Тем не менее, я не могу понять, как все могло пойти не так. Все изменения между большим коммитом и файлом с конфликтующими файлами были потеряны.
Как вы могли заметить, зеленая линия представляет локальную ветку моего коллеги, оранжевый / коричневый исправлениеветка и синий мой.
Итак, после того, как я разрешил конфликты на cb2ff5f , я объединил изменения ветви исправлений, а затем обновил номер версии в соответствующих файлах.
Тем временем мой партнер былвсе еще работает над новыми изменениями, поэтому его рабочее дерево было в грязном состоянии .Я уведомил его, что объединил его изменения, и попросил его вытащить их.Он не мог этого сделать, потому что некоторые из грязных файлов конфликтовали с удаленной веткой (в которой было мое слияние).Он использует расширение Eclipse EGit в качестве git-клиента.Как некоторые из вас могут знать, в этой ситуации Eclipse предлагает три варианта: сброс этих файлов (отмена ваших изменений), сохранение их или фиксация.Он решил совершить их.Это коммит 3c684e1 (оставляя остальные файлы грязными).И затем, каким-то образом, окончательный коммит слияния отбросил все изменения от коммитов в удаленной ветке, включая мой коммит слияния.
Это ошибка в Eclipse EGit?Я не могу думать ни о чем другом.
Обновление: Я обнаружил кое-что интересное.Я выполнил git log -p 3c684e1 12ab983
и git log -p 8095107 12ab983
.Оба вывода показывают, что изменения моих коммитов были правильно объединены.Тем не менее, когда я запускаю git checkout 12ab983
... изменений там нет.Итак, похоже, что Git врет
Обновление 2: Я попытался воспроизвести проблему.Я создал локальную ветку с именем branch_mine
из коммита 8095107
и другую с именем branch_other
для 137be26
(большой коммит от моего партнера до разрешения конфликтов).Я воссоздал то, что сделал партнер branch_other
.Я изменил некоторые файлы, оставив дерево в грязном состоянии.Я попытался объединиться с branch_mine и Eclipse пожаловался, потому что я изменил некоторые файлы, которые конфликтовали.Я зафиксировал эти файлы и снова попытался выполнить слияние.Работало и без каких-либо конфликтов.Кроме того, мои изменения были внесены в новый коммит слияния.Так что это должно быть проблемой со стороны моего партнера.Просто я не знаю, что именно, и я боюсь, что это может повториться.Может ли это быть проблема синхронизации с файловой системой?Кроме того, стоит отметить, что, хотя он использует EGit в качестве клиента Git, он на самом деле занимается кодированием в Visual Studio Code.Итак, возможно, между этими двумя возникла проблема с синхронизацией, в результате чего коммит слияния на самом деле lie .Это просто удивительно и страшно одновременно.