2016-10-31 3 views
0

У меня есть филиалы develop и upgraded, которые я хочу объединить. Филиал upgraded происходит от develop, но есть около 50 новых коммитов (в основном, слияния с другими ветвями) на нем и многое другое изменяется в upgraded. Поэтому я хочу объединить develop в upgraded последовательно (commit by commit), потому что есть изменения API, которые необходимо обновить и слить конфликты. Но когда я делаю это путем простого слияния коммитов от develop, он создает новое соединение для каждой фиксации на графике. Мне не нужны 50 ненужных графических путей ...Как объединить ветки последовательно с четкой историей с помощью git?

Как я могу избежать этих сумасшедших графических соединений? С большим удовольствием пользуется Atlassian Sourcetree GUI.

enter image description here

+1

Почему вы делаете это один за другим ?? – Amit

+0

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

+0

Посмотрите на ['git imerge'] (https://github.com/mhagger/git-imerge). Меня никогда не привлекали к этому, поэтому я не знаю много, кроме того, что это похоже на точный матч за то, о чем вы просите. – jthill

ответ

0

Создать вторичную ветвь develop-rebase, которые указывают на то же дерево, как develop. Вы сохраняете оригинальную ветку develop на случай, если что-то пойдет не так. Затем, rebase develop-rebase поверх upgraded, который последовательно применяет каждую фиксацию. Сделайте это интерактивно, чтобы у вас была возможность протестировать после каждой фиксации.

Надеемся, вы получите чистое состояние и примените некоторые исправления во время этого процесса.

Вы можете остановиться здесь, если вам этого достаточно. Но если вы хотите слить от develop до upgraded без промежуточных переустановок, вы можете воспользоваться разницей от ваших новых develop-rebase и develop, применить его поверх develop, а затем избавиться от develop-rebase.

Затем произведите разные атомные коммиты из этого патча, которые объясняют, как вы модифицировали develop, чтобы сделать его слитым с upgraded и слить.

1

Если вы уже проделали работу и хотите сжать все слияния, см. Squashing a sequence of small merges from master into my branch with git while keeping reference to master? (Это использует командную строку, это, вероятно, невозможно в графическом интерфейсе, поскольку графические интерфейсы предназначены для упрощения выполнения обычных и редко принимают необычные вещи вообще.)

Если вы хотите сделать это в будущем, то git imerge (как упоминалось в jthill's comment) выполняет эту работу. Опять же, он запускается из командной строки.

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