Я основываю свое Git-репо на успешной модели ветвления Git, и мне было интересно, что произойдет, если у вас возникнет такая ситуация:
Скажем, я разрабатываю две ветви функций A и B, а для B требуется код из A. Узел X вносит ошибку в функцию A, которая влияет на ветку B, но это не обнаруживается в узле Y, где функции A и B были объединены и тестирование проводилось перед повторным разветвлением и продолжением следующей итерации.
В результате, на узле Z обнаружена ошибка людьми, работающими над функцией B. На этом этапе было решено, что исправление необходимо. Это исправление следует применять к обеим функциям, поскольку людям, работающим над функцией A, также необходимо исправить ошибку, поскольку она является частью их функции.
Должна ли ветка с исправлениями ошибок создаваться из самого последнего узла компонента A (тот, который ответвляется от узла Y), а затем объединяться с функцией A? После чего обе функции объединяются в разработку и тестируются перед разветвлением?
Проблема в том, что для решения проблемы требуется объединение обеих ветвей. Поскольку функция B не затрагивает код в функции A, есть ли способ изменить историю в узле Y, внедрив исправление и по-прежнему позволяя ветке функции B оставаться неизменной, но иметь фиксированный код из функции A?
Слегка связано: соглашение о ветвлении Git
Ответы:
Используйте отдельный коммит, чтобы исправить ошибку в одной ветке, а затем выберите «вишню», чтобы зафиксировать коммит в другую ветку.
источник
Возможно, в A или X нет ошибок. Исправьте ошибку в ветви B, где она была найдена. Исправление будет распространяться на X и A в нормальном ходе событий.
источник
Рабочий
git
процесс, популярный в Mercurial, хотя и не пользуется популярностью, заключается в обновлении до ревизииX
, исправлении ошибки (какX
2 ), а затем повторении слиянияY
(которое было бы парой слияний в Mercurial).На самом деле, этот рабочий процесс проще в
git
так после того, как все уже перешли отY
доY
2 то рефов в оригиналеY
будут потеряны , и это в конечном итоге будет мусора. Вhg
вас пришлось бы вручную лишить эти коммиты , чтобы привести в порядок свой репозиторий.источник