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
Другие вопросы по тегам