Git: применить часть фиксации к другой ветке
Как я могу применить часть фиксации из одной ветки к другой? Я понимаю, что я могу сделать виртуозную фиксацию, но мне нужно сделать еще один шаг и "вишневый выбор" некоторых изменений, внесенных этим фиксатором, и применить их к другой (целевой) ветке.
Есть ли чистый способ сделать это, или я должен просто применить весь коммит, вручную отменить некоторые куски и не задумываться о создании в будущем большего количества атомных коммитов?
Ответы
Ответ 1
git cherry-pick -n <SHA>
будет выполнять изменения, но не фиксировать их. Затем вы можете использовать git reset -p
для того, чтобы отключить биты, которые вы не хотите, или git reset HEAD
и git add -Ap
, чтобы выполнить только те изменения, которые вы хотите.
Ответ 2
Если части, которые вы хотите применить, могут быть указаны по пути (т.е. вы не хотите указывать ханки внутри одного файла) возможно другое решение.
Один из подходов состоит в том, чтобы сформировать патч из фиксации и применить его к вашей ветке.
С веткой, которую вы хотите изменить, выдается:
git show <SHA> -- <relevant paths> | git apply
Применит любые изменения в фиксации SHA в путях relevant paths
к вашей текущей рабочей копии.