Я хочу объединить изменение в фиксации ветки разработки с другой веткой, используя git
. Я пробовал git cherry-pick
, но это приводит к изменению всего файла, а не отдельных изменений. Кто-нибудь может с этим помочь?
Следует иметь в виду, что фиксация - это наименьшая единица, учитываемая при принятии решения о том, что «уже слито». Таким образом, существует компромисс: если вы не создадите отношения слияния, вы вполне можете получить ложный конфликт слияния в дальнейшем, но если вы делать создадите отношения слияния между ветвями только для одного изменения, это, скорее всего, привести к тому, что какое-то будущее слияние не сможет принять другие изменения.
В 99% случаев не создание отношений слияния - меньшее зло здесь, и поэтому я бы сказал, что вы на правильном пути с cherry-pick
.
Следующим шагом будет получение Только желаемого изменения. Самый простой способ - использовать опцию --no-commit
(или -n
):
git cherry-pick -n <commit-id>
Тогда изменения из целевой фиксации будут поставлены, но не зафиксированы. Вы можете удалить изменения в других файлах с помощью
git reset HEAD -- path/to/other/file
git checkout -- path/to/other/file
Если нужное изменение находится в том же файле, что и другие изменения, вы можете деактивировать файл, а затем повторно выполнить его в «интерактивном» режиме с помощью
git reset HEAD -- path/to/file
git add -i path/to/file
(Подробнее об интерфейсе «интерактивного добавления» см. https://git-scm.com/docs/git-add. У него есть несколько способов выбрать, какие изменения следует включить.
После того, как вы выполнили выборочную постановку, вы можете зафиксировать, а затем удалить все оставшиеся нежелательные изменения из рабочего дерева.