Как раздавить мои изменения в единичный результат и выбрать мастер-ветку?
Предположим, что мне нужно выполнить рефакторинг средней длины (несколько дней).
Я создаю "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