2015-01-27 2 views
0

У меня есть два ведомых мастера и ветка-1. Ветвь-1 от мастера, и в какой-то момент у нее есть фиксация, выбранная из определенной фиксации в мастер.Как предотвратить дублирование транзакций в git-слиянии?

Когда я объединяю ветку-1 назад к мастеру, появляется сборка вишни, в результате чего журнал git показывает две коммиты в главном с одинаковыми изменениями. Как сделать так, чтобы у хозяина было только одно SHA для этого изменения?

+1

Вам действительно не нужно беспокоиться об этом. Хотя фиксация может отображаться в истории дважды, это законно, потому что изменение ввело текущий код через два разных маршрута. Тем не менее, последствия изменения будут применены только один раз, и 'git' достаточно умен, чтобы разобраться в этом - когда он выполняет слияние, он эффективно видит, что изменение от' branch-1' уже было применено, и поэтому его больше не нужно применять. – twalberg

ответ

0

Невозможно сделать это без какой-либо перезаписи истории. Если вы согласны переписать историю branch-1, прежде чем слить ее на master, вы можете выполнять сквош-слияние или переадресацию в интерактивном режиме.

С помощью сквош-слияния вы делаете git checkout master; git merge --squash branch-1 и получаете один бит сжатого фиксации всех изменений в branch-1.

Rebase позволит вам воспроизвести историю branch-1 поверх master. Поскольку собранная вишня фиксация уже присутствует там, вы можете просто прокомментировать ее, если в интерактивном режиме.

Смежные вопросы