Ребазинг после слияния сквоша?

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

Тематических веток несколько, и их разделяет команда. Над некоторыми ветками работает более одного разработчика. Все тематические ветки регулярно обновляются из основной ветки.

Чтобы очистить историю в ветке master, я сделал git merge --squash при слиянии кода из ветки темы в ветку master. Это сработало отлично.

Теперь, когда тематические ветки перебазированы, коммиты дублируются. Есть ли способ очистить коммиты в тематических ветках после успешного выполнения команды 'git merge --squash'?


person mustard    schedule 29.03.2012    source источник
comment
Он не будет работать идеально в случае удаленных файлов. Возможно, это не лучший вариант - см. здесь   -  person Mr_and_Mrs_D    schedule 08.05.2013


Ответы (2)


Предположим, у вас есть следующий сценарий:

A - B - C (master)
 \
  D - E (topic)

Если вы объедините тему в мастер с помощью --squash, вы получите что-то вроде

A - B - C - F (master)
 \
  D - E (topic)

Где F содержит все изменения от D и E. Перебазирование темы на master не имеет смысла, поскольку ветка темы уже находится на master (через F). Вместо перебазирования вы можете переместить ветку темы в F, например

git checkout master
git branch -f topic F

Что дает:

A - B - C - F (master/topic)

Все, что вам нужно сделать сейчас, это подтолкнуть перемещенную ветку темы:

git push -f origin topic
person ralphtheninja    schedule 05.04.2012
comment
Спасибо! Это именно то, что мне нужно. - person mustard; 06.04.2012
comment
Будьте осторожны с сквошем - F может содержать файлы, которые вы удалили в своей тематической ветке, см. stackoverflow.com/a/14343784/281545 - person Mr_and_Mrs_D; 08.05.2013

Раньше я делал то же самое, что и Магнус, только с парой дополнительных команд:

git checkout master
git merge --squash topic
git commit -m "Add topic feature"

git branch -D topic
git checkout -b topic

git push -f origin topic
person Wojtek Kruszewski    schedule 16.11.2012