Слить ветку темы на git, удалив всю историю коммитов ветки темы? - PullRequest
4 голосов
/ 30 июля 2011

Я хотел бы знать, возможно ли следующее в git:

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

A---B---C---D---E  master
         \
          W---X---Y  topic

Я хотел бы объединить все изменения, внесенные в ветку темы, в master, но без сохранения истории изменений. То есть вместо:

A---B---C---D---E---F  master
         \         /
          W---X---Y  topic

Я хотел бы иметь следующую историю:

A---B---C---D---E---F  master

Где F - это новый коммит в основной ветке, который эквивалентен изменениям, сделанным в коммитах W, X, Y, примененных сразу.

Я также хотел бы сохранить ветку темы без изменений:

A---B---C---D---E---F  master
         \         
          W---X---Y  topic

Возможно ли это? Я делал несколько тестов с git rebase, но пока он не работал так, как мне нужно.

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 30 июля 2011

Это должно быть проще, чем предлагал плохой дирижабль, но я не пробовал это:

$ git checkout master
$ git merge --squash topic
$ git commit *what has changed*

Однако, когда я правильно понимаю git help merge, это должно сработать.

1 голос
/ 30 июля 2011

Создайте копию ветки темы, интерактивно переместите ее в основную ветку (git rebase -i E), раздавив коммиты в ветке темы, и, наконец, удалите копию ветки темы, которую вы создали.После этого вы должны получить то, что хотели.

0 голосов
/ 30 июля 2011

Создать новую ветку не по теме (это одноразовый)

git rebase master --interactive

(раздавить коммиты в один)

Затем на мастере,cherrypick один коммит в одноразовой ветке.

Вы получите именно ту историю, которая вам нужна на master, и ветка темы останется нетронутой.

Могут быть более простые способы сделатьто же самое ...

...