Git merge --no-commit vs git cherry-pick --no-commit
Есть ли разница между git merge --no-commit и git cherry-pick --no-commit?
И есть ли какая-либо разница в истории, если я зафиксирую после этих двух команд?
Ответ 1
Если вы зафиксируете после git merge --no-commit, вы действительно получите фиксацию слияния. Если после git cherry-pick --no-commit вы получите фиксацию с одним родителем.
Следовательно, да, есть разница между этими двумя командами.
В частности, если у вас есть что-то вроде
A -- B -- C
\ L HEAD
\
-- D -- E
Если вы cherry-pick совершите E, вы не получите модификаций commit D. Если вы merge, вы получите оба.
Ответ 2
Пока git-merge используется для объединения двух или более историй развития вместе, git-cherry-pick используется для применения изменений, внесенных в некоторые существующие коммиты.
Итак, после фиксации после выполнения git-merge, Git добавит то, что называется merge commit. С другой стороны, когда cherry-pick (ing) фиксируется, Git будет применять изменения, внесенные этими коммитами в верхней части вашего (нет слияния между двумя или несколькими ветвями). Другими словами, Commits клонируются и помещаются поверх вашей ветки.