Ребазинг после слияния в сквош? - PullRequest
10 голосов
/ 29 марта 2012

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 05 апреля 2012

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

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
3 голосов
/ 16 ноября 2012

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

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
...