Git объединить с --no-ff и --squash
Я использую способ управления филиалами в моем репозитории, как описано в: http://nvie.com/posts/a-successful-git-branching-model/
Таким образом, последовательность команд, которую я должен использовать, будет следующей:
git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff mybranch
Однако есть одна вещь, которую я хотел бы сделать по-другому, в некоторых случаях:
Я хотел бы сохранить все свои коммиты в своей ветке функций (mybranch
), но объедините их (или раздавите) в единую разницу при объединении в develop
,
Так что, я думаю, последовательность команд должна быть такой:
git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff --squash mybranch
Буду ли я делать что-то неправильно, если я буду комбинировать --no-ff
с --squash
?
Я не решаюсь попробовать это из-за того, что "сжатие" и "сохранение истории" являются ортогональными требованиями - см. Разделение всех моих коммитов (включая слияния) на один коммит без изменения истории
Мое обоснование в том, что я хочу сохранить историю на одной ветке (mybranch
) и suqash на другой ветке (develop
) -> потому что эти действия выполняются в разных ветках, это нормально.
1 ответ
Я попытался объединить --squash и --no-ff вместе и получил:
fatal: You cannot combine --squash with --no-ff.
Git Merge в основном это сквош. После разрешения конфликтов это будет выглядеть как один коммит на разработку. Разница пересмотра слияния является результатом разрешения конфликта. И да, изменения на MyBranch сохраняются. Просто сделайте "gitk mybranch &" после слияния, чтобы проверить.
К тому же Тень верна. Не бойся. Создайте новую ветку, поиграйте и посмотрите, каковы результаты.
Ущерб был нанесен вашей командой "git pull --rebase origin Develop".
Ответ (предполагается, что у вас есть локальная ветка разработки, основанная на происхождении / развитии):
git checkout develop
git pull
git merge --no-ff mybranch