Подтвердить что ты не робот

Git: применить часть фиксации к другой ветке

Как я могу применить часть фиксации из одной ветки к другой? Я понимаю, что я могу сделать виртуозную фиксацию, но мне нужно сделать еще один шаг и "вишневый выбор" некоторых изменений, внесенных этим фиксатором, и применить их к другой (целевой) ветке.

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

4b9b3361

Ответ 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 к вашей текущей рабочей копии.