Viji
@Viji
Associate DevOps Engineer

Как называется такая практика и является ли она приемлемой?

Диаграмма:

640622dcdd041079525225.png

Приведена на рисунке ветка мастер .
1. Является ли нормальной практикой для разработчика создать ветку feature1 от не последнего коммита мастера, то бишь не от "g" и потом смерджить feature1 с коммитом X2 в мастер затирая изменения f и g?
2. Какой git командой это можно сделать?
  • Вопрос задан
  • 659 просмотров
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Такая практика называется вандализмом и не является приемлемой.

Создать коммит Х2, который отменит все новые изменения master можно например так
# Вредоносные действия делаем в своей ветке, 
# так как не можем коммитить напрямую в master
git switch feature
# Якобы подтягиваем изменения из master, но по факту отменяем.
git merge --ff $(git commit-tree -p master -p feature1 -m "X2" feature1^{tree})
# Отправляем Pull Request обратно в master
Но зачем? Практика перезатирания чужих правок ненормальна, если только это не исправление ошибок.

Чтобы бороться с вандализмом используется рецензирование, когда Pull Request не вливается в основную ветку пока другие люди не просмотрят изменения и не одобрят.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Является ли нормальной практикой для девелопера создать ветку feature1 от не последнего коммита мастера, то бишь не от "g"

Да. В частности это стандартная практика разработчиков ядра linux: фичи должны расти от релизов или релиз-кандидатов, а не от каких-то случайных коммитов.

и потом смерджить feature1 с коммитом X2 затирая изменения f и g?

Из вопроса непонятно, это требование -- затирать, или это побочный эффект которого хочется избежать?
Если делать обычный git merge, то никакого затирания не будет. Будут конфликты, если изменения касаются одних и тех же мест, иначе будет объединение изменений ветки и мастера.
Чтобы затирать изменения можно делать git merge --strategy=ours -- в результате мёржа изменения сделанные в ветке которая мёржится будут потеряны.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Git
software engineer
Ветка отпочковывается от любого коммита. Обычно руками никто не создает ветку из старых коммитов, делают из последнего свежего.
Просто весь смысл ветки в том, чтобы свою фичу пилить не блокируя мастер или релиз

И когда ты мержишь в мастер, ты не затираешь в нем коммиты, а добавляешь свои изменения.
Если в исходниках в одном и том же месте правили в твоей ветке и в мастере - при попытке мержа получишь конфликт, который надо будет исправить.

P.S. в фичаветку можно периодически мержить из мастера, чтобы держать свою ветку "свежей" и в конце, при мерже в мастер, вероятность конфликтов была меньше.

А так - обычный feature-branch flow
Ответ написан
Комментировать
@Vitsliputsli
Последний коммит в ветке сегодня, завтра уже может и не быть таковым.
Merge коммиты не "затирает" - пишите команды, которые используете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы