Имеется репозитарий https://github.com/xintrea/mytetra_dev, рабочая ветка experimental. Перед работой все засинхронизировано на ветке experimental в обе стороны (т. е. сделаны push и pull).
Мне нужно принять pull-реквест:
https://github.com/xintrea/mytetra_dev/pull/95
У него имеются конфликты, которые можно посмотреть при нажатии на кнопку «Resolve conflict» на странице:
https://github.com/xintrea/mytetra_dev/pull/95/conflicts
(видимо, эти данные по конфликтам видны только владельцу репозитария). В любом случае, конфликты несложные, и их всего 5 штук, как показывает GitHub:
Conflicting files
app/bin/mytetra.qrc
app/src/libraries/ShortcutManager.cpp
app/src/libraries/wyedit/EditorConfig.cpp
app/src/libraries/wyedit/EditorConfig.h
app/src/libraries/wyedit/EditorToolBar.h
Для принятия изменений в этом Pull-реквесте, GitHub предлагает выполнить команды, которые создадут новую ветку, и в нее принять изменения из pull-реквеста:
git checkout -b DikBSD-formatStrike experimental
git pull https://github.com/DikBSD/mytetra_dev.git formatStrike
Я рассчитывал на то, что нужно будет разрулить конфликты в 5 файлах, и pull-реквест нормально примется. Однако сразу получил непонятку при выполнении «git pull ...»:
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Total 21 (delta 18), reused 18 (delta 18), pack-reused 3
Распаковка объектов: 100% (21/21), готово.
Из https://github.com/DikBSD/mytetra_dev
* branch formatStrike -> FETCH_HEAD
Сначала перематываем указатель текущего коммита, чтобы применить ваши изменения поверх него…
Применение: Улучшено форматирование выделенного текста, как Code.
Применение: Сделана вставка горизонтальной линии в "пустой" абзац, где расположен
Использую индекс для реконструкции базового дерева…
M app/bin/mytetra.qrc
M app/src/libraries/ShortcutManager.cpp
M app/src/libraries/wyedit/Editor.cpp
M app/src/libraries/wyedit/EditorConfig.cpp
M app/src/libraries/wyedit/EditorConfig.h
M app/src/libraries/wyedit/EditorToolBar.cpp
M app/src/libraries/wyedit/EditorToolBar.h
M app/src/libraries/wyedit/formatters/TypefaceFormatter.cpp
M app/src/libraries/wyedit/formatters/TypefaceFormatter.h
Откат к применению изменений к базовому коммиту с помощью трехходового слияния…
Автослияние app/src/libraries/wyedit/formatters/TypefaceFormatter.h
Автослияние app/src/libraries/wyedit/formatters/TypefaceFormatter.cpp
КОНФЛИКТ (содержимое): Конфликт слияния в app/src/libraries/wyedit/formatters/TypefaceFormatter.cpp
...
Стоп, что это за файл «TypefaceFormatter.cpp»? В списке обещанных конфликтующих файлов его нет. Ну ладно, разрулил в нем, потом пошли обещанные файлы, а потом пошли опять файлы, в которых конфликты не обещались, я поначалу их разруливал и делал «git add . ; git rebase --continue», потом уже забил и стал писать «git rebase --skip», чтоб посмотреть что получится. В конечном итоге получил странное состояние репозитария, в котором сплошняком более ранние изменения встроены позже более поздних, причем от одного и того же пользователя (меня), кароче какой-то бред. Портянка лога слияния вот такая:
https://pastebin.com/t3zYgU2g
А состояние репозитария после слияния выглядит так:
http://i.piccy.info/i9/c5a5c040be42a4493bf7d7df17f5b0f4/1547029178/237701/129...
Видно, что коммиты даже от одного пользователя Sergey выстроены далеко не в хронологическом порядке. Почему так?
При этом, если сравнить состояние конца ветки experimental и конца ветки DikBSD-formatStrike, то оно _походит_ на то, что принялись правильные изменения. Но тут я не могу быть абсолютно точным, потому что начал скипать странные изменения, о которых написано выше, начиная с момента, когда мне показалось что все заявленные конфликты я разрешил.
В общем, вопрос в том, как более проще и надежно слить изменения этого pull-реквеста, и не получить вот такое странное поведение git? Пока что могу просто повторить изменения у коде вручную, не принимая Pull-реквест. Но это же не вариант, если есть инструмент Git, который призван делать именно эту работу.