Git: Исправление ошибки, затрагивающей две ветви

16

Я основываю свое Git-репо на успешной модели ветвления Git, и мне было интересно, что произойдет, если у вас возникнет такая ситуация:

введите описание изображения здесь

Скажем, я разрабатываю две ветви функций A и B, а для B требуется код из A. Узел X вносит ошибку в функцию A, которая влияет на ветку B, но это не обнаруживается в узле Y, где функции A и B были объединены и тестирование проводилось перед повторным разветвлением и продолжением следующей итерации.

В результате, на узле Z обнаружена ошибка людьми, работающими над функцией B. На этом этапе было решено, что исправление необходимо. Это исправление следует применять к обеим функциям, поскольку людям, работающим над функцией A, также необходимо исправить ошибку, поскольку она является частью их функции.

Должна ли ветка с исправлениями ошибок создаваться из самого последнего узла компонента A (тот, который ответвляется от узла Y), а затем объединяться с функцией A? После чего обе функции объединяются в разработку и тестируются перед разветвлением?

Проблема в том, что для решения проблемы требуется объединение обеих ветвей. Поскольку функция B не затрагивает код в функции A, есть ли способ изменить историю в узле Y, внедрив исправление и по-прежнему позволяя ветке функции B оставаться неизменной, но иметь фиксированный код из функции A?

Слегка связано: соглашение о ветвлении Git

Арам Кочарян
источник
6
Разве вы не можете просто исправить ошибку в ветке 'development', а затем объединить ее как с функцией A, так и с функцией B?
tdammers
Хммм, похоже, так будет лучше. В функции А могут быть конфликты слияний, но я думаю, что это неизбежно.
Арам Кочарян
Если вы не продвинулись дальше в ветке 'development', и исправление не перекрывает какие-либо изменения в ветке 'Feature A', тогда у вас не будет никаких конфликтов.
tdammers

Ответы:

24

Используйте отдельный коммит, чтобы исправить ошибку в одной ветке, а затем выберите «вишню», чтобы зафиксировать коммит в другую ветку.

Кристиан Пальмсьерна
источник
Это работает хорошо, ура.
Арам Кочарян
5

Возможно, в A или X нет ошибок. Исправьте ошибку в ветви B, где она была найдена. Исправление будет распространяться на X и A в нормальном ходе событий.

Кевин Клайн
источник
Спасибо, это также возможно, если ошибка не влияет на функцию А.
Арам Кочарян
0

Рабочий gitпроцесс, популярный в Mercurial, хотя и не пользуется популярностью, заключается в обновлении до ревизии X, исправлении ошибки (какX 2 ), а затем повторении слияния Y(которое было бы парой слияний в Mercurial).

На самом деле, этот рабочий процесс проще в gitтак после того, как все уже перешли от Yдо Y2 то рефов в оригинале Yбудут потеряны , и это в конечном итоге будет мусора. В hgвас пришлось бы вручную лишить эти коммиты , чтобы привести в порядок свой репозиторий.

Марк Бут
источник