Выберите и разместите диапазон коммитов в подкаталог или поддерево.

Как я могу сказать вишнему выбрать диапазон коммитов и раздавить его?

Или, другими словами, применить разницу между двумя фиксациями к текущему состоянию репозитория?

Следующее не работает (у Cherry-pick нет параметра --squash):

git cherry-pick --squash e064480..eab48b59c

Примечание. Мой вариант использования находится в сценарии поддерева - прежде чем кто-либо начнет спорить, что я не должен раздавливать.

Следующее работает, но тогда у меня есть ряд отдельных коммитов. После этого я могу раздавить их вручную с помощью интерактивной перебазировки.

git cherry-pick -X subtree=vendor/package e064480..eab48b59c

Есть ли способ сделать раздавливание как часть вишневого выбора?


person donquixote    schedule 01.02.2016    source источник


Ответы (3)


Передайте -n git cherry-pick. Это применит все коммиты, но не зафиксирует их. Затем просто выполните git commit, чтобы зафиксировать все изменения в одном коммите.

person David Deutsch    schedule 01.02.2016
comment
что, если есть несколько конфликтов в диапазоне выбранных коммитов? - person Sazzad Hissain Khan; 08.08.2017
comment
@SazzadHissainKhan, хотя я почти уверен, что это будет работать так же (т. Е. Вы разрешаете каждый конфликт, а затем используете git cherry-pick --continue), в этом случае, вероятно, безопаснее всего не использовать -n, чтобы после завершения операций вы могли посмотреть при каждой отдельной фиксации и подтверждении, что все хорошо. Затем вы можете раздавить их с помощью интерактивной перебазировки. - person David Deutsch; 13.09.2017
comment
В моем случае я уже выбрал вишневый коммит и хотел раздавить другой коммит, который исправляет опечатку, появившуюся в первом коммите. Поскольку я не выбирал второй коммит, я выбрал его с опцией -n (--no-commit), а затем отредактировал первый коммит с git commit --amend --no-edit (опция no-edit повторно использует сообщение коммита первого коммита, а не подскажите новый). - person CodeManX; 29.11.2017
comment
@DavidDeutsch ошибается. Если вы выберете коммиты с --no-commit, получите конфликт, разрешите его и проиндексируете файлы, git cherry-pick --continue не сработает: error: your local changes would be overwritten by cherry-pick. hint: commit your changes or stash them to proceed. fatal: cherry-pick failed. Если вы зафиксируете изменения для продолжения, вы получите коммиты, которые вам не нужны (плюс поэтапные изменения в индексе, у которых не было конфликтов). Если вы спрячете их, вы проигнорируете конфликтующие изменения (можно применить их из тайника позже, но с более сложными для разрешения конфликтами) - person CodeManX; 14.04.2021

Полезной альтернативой git cherry-pick -n для некоторых случаев использования может быть git merge --squash — например, когда вы хотите протестировать изменения ветки функций поверх ветки интеграции без перебазирования.

Источник: В чем разница между git merge --squash и git cherry-pick?

person lkraav    schedule 14.10.2020

следуйте от мастера => выберите два коммита из другой ветки

мастер проверки git

git вишневый выбор: 1

git вишневый выбор: 2

git reset --soft HEAD~2 (количество коммитов выбора вишни, т.е. 2 )

git добавить .

git совершить

person Jayen Chondigara    schedule 22.09.2020