Как раздавить мои изменения в единичный результат и выбрать мастер-ветку?

Предположим, что мне нужно выполнить рефакторинг средней длины (несколько дней).

Я создаю "mybranch" от мастера, выполняю работу, иногда выполняю слияния от мастера к mybranch (некоторые другие члены команды должны продолжать работу, и, вероятно, мне нужно будет получить их изменения). И через некоторое время я готов объединить свои изменения обратно к мастеру.

Будет ли я иметь возможность скворовать только мои изменения (исключая изменения слияниями из мастера, поскольку они не мои) и вишня - выберите единичный результат моих работ в мастер? Можно ли сделать сценарий?

Ответ 1

Угу. Вы можете подтвердить это небольшим тестовым хранилищем. Просто выполните:

git rebase --interactive master mybranch

и выберите squash для всех строк, кроме первого. Затем вы просто проверяете master и выполняете регулярное ускоренное слияние mybranch.

Ответ 2

После перезагрузки не будет ссылок на те коммиты в предыдущем "mybranch"

Что я буду делать и могу быть более безопасным, так это то, что

git checkout mybranch

Создайте ветку (это фактически временная ветвь для целей перераспределения)

git checkout -b movingToMaster

Попробуйте перезагрузить movingTomaster до master

git rebase -i master

Будет вызван редактор, спрашивающий вас, какая фиксация должна быть выбрана или сжата или отредактирована...

Отредактируйте эти файлы, в вашем случае первая строка должна оставаться неизменной, а другая строка должна изменить "выбрать" на "сквош", вы можете изменить свое сообщение фиксации, если хотите. Сохраните его после того, как вы сделаете достаточно изменений в этом файле.

то есть.

pick 0a81405 Bug Fix 1
pick 91be655 Bug Fix 2
pick 1200fc7 Bug Fix 3
pick 1211fb7 Bug Fix 4
pick ba77fdf Bug Fix 5

Изменить на

pick 0a81405 Bug Fix 1
squash 91be655 Bug Fix 2
squash 1200fc7 Bug Fix 3
squash 1211fb7 Bug Fix 4
squash ba77fdf Bug Fix 5

Сохраните его. Тогда

git checkout master

Переместите ветвь master в ветвь movingTomaster, используя команду Fast forward merge

git merge movingTomaster

Примечание: это не будет иметь никакого вреда, поскольку это только ускоренное слияние и не будет загромождать вашу историю.

Удалите ветвь movingTomaster, если вы хотите

git branch -D movingTomaster