Как использовать Git для объединения кода из простых файлов

#git #git-merge #git-diff

#git #git-слияние #git-diff

Вопрос:

Я ищу способ использования Git или принимаю рекомендации по любым клиентам Git, которые могут иметь мощные инструменты слияния для решения проблемы, которую можно резюмировать как:

  1. Код был развернут на сервере, неизвестная версия / дата
  2. Код был «разработан» на … сервере…обширно
  3. Код в репозитории менялся с неумолимым течением времени… обширно
  4. Код, написанный на сервере, должен быть интегрирован с последней версией

Я попытался создать ветку из master, а затем вставить обновленный код с сервера поверх рабочей копии. Из этого я вижу разницу, но внесение этих изменений приведет к перезаписи изменений из master, на самом деле это не слияние.

Как я могу использовать git для объединения кода таким образом, чтобы нужно было только вручную разрешать конфликты и, возможно, автоматически объединять остальные? (Очевидно, понимая, что он может не создавать, запускать тесты или быть логически корректным)

Я подозреваю, что если бы я знал дату, когда код был взят из репозитория и развернут на сервере, я мог бы перейти от master к commit в этот период времени и применить измененные изменения сервера к этой ветке, а затем попытаться объединить это с текущим master.

Комментарии:

1. Если я вас правильно понял, у вас есть куча кода, разработанного вне системы контроля версий, и вы хотите его объединить?

Ответ №1:

Создайте «сиротскую» ветку, у которой нет предыдущей истории. Добавьте и зафиксируйте старый код в этом репозитории. Убедитесь, что он имеет ту же структуру каталогов, что и ваш код в master. Затем объедините две ветви с git merge --allow-unrelated-histories помощью .

  1. git switch --orphan live-code
  2. Настройте структуру каталогов в соответствии с master.
  3. git add .
  4. git commit
  5. git checkout master
  6. git merge --allow-unrelated-histories live-code
  7. Наслаждайтесь конфликтами.

В качестве альтернативы, сделайте свое лучшее предположение, когда код расходится, создайте ответвление от этой точки в master и перейдите оттуда. Это может упростить работу, если вы правильно угадали.

Комментарии:

1. Спасибо @schwern, это звучит как хорошие варианты. Я раньше не слышал о бесхозной ветке. Я попробую их и приму ответ