1

В университете, где я работаю, мы используем систему управления обучением с открытым исходным кодом (Moodle). Со временем мы отредактировали исходный код напрямую, чтобы исправить найденные ошибки и предоставить пользовательские функции. Я хотел бы иметь возможность следить за исправлениями ошибок через Git-репозиторий, а также отслеживать наши изменения и следить за тем, чтобы наши изменения были сохранены.

Я относительный новичок Git, но из того, что я могу сказать здесь, наша текущая ситуация.

     --C----C----C----C----C   < custom
    /
---B-----F-----F-----F-----F-----F-----F--...   < origin

B = the build we installed
C = our changes
F = bug fixes

Если коротко, мой вопрос - как совместить буквы "C" и "F"? Слияние? Перебазирования? Какое дерево я должен слить / перебазировать в другое?

1 ответ1

3

Слияние и ребазинг в основном делают одно и то же: создание последнего коммита включает изменения из обеих предоставленных веток. Но способ, которым они делают это, отличается.

Слияние создает коммит, в котором два определены как родительские, а перебазирование «перемещает» ваше дерево, поэтому его первый коммит (т.е. имеет одного родителя) основан на последнем коммите другой ветви (источник в вашем случае). Результирующее древовидное состояние идентично.

В этом случае правильно сделать слияние custom ветви с origin:

git checkout custom
git merge origin

Перебазирование полезно только в том случае, если вы хотите отправить пакет исправлений сопровождающему проектов, чтобы ему не нужно было адаптировать их к более поздним изменениям вручную.

Команды перебазирования будут:

git checkout custom
git rebase origin

Также есть команда git-cherry-pick(1), которую можно использовать для применения произвольного коммита из любой ветви, какой будет патч.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .