Git-как выборочно применять изменения из одной ветви в другую?

можно ли выборочно применять изменения из одной ветки в другую с помощью Git?

более конкретно, я использую public dev филиал для GitHub и рядового master отделение для развертывания. Когда изменения вносятся в одну ветвь, они должны применяться к другой, но некоторые строки кода должны оставаться разными. В моем случае это несколько классов CSS и кормить.

Я новичок в Git, но я сделал свое исследование:

  • git merge --no-commit --no-ff может используется с последующим git mergetool выбрать то, что я хочу в случае конфликта. Проблема в том, что он работает только для конфликтов, которые Git не может автоматически объединить, поэтому то, что я хочу остаться другим, заменяется, прежде чем я получу возможность использовать мой mergetool.

  • git difftool --cached полезно, поскольку это позволяет мне видеть различия, но мне нужно скопировать то, что я хочу сохранить оттуда, и вручную заменить его текстовым редактором, поскольку я не могу просто выбрать и сохранить, как я могу с mergetool.

  • git cherry-pick кажется, применить указанную фиксацию к другому, но то, что я хочу остаться другим, может быть разбросано на разные коммиты, и эти коммиты могут не только включать то, что я хочу остаться другим. Я не могу видеть, как это работает, если я не сделаю миллионы коммитов, которые сведут меня с ума.

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

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

2 ответов


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

кстати, если вы хотите взять некоторые файлы из фиксации, вы можете использовать cherry-pick с комбинацией других команд, как объяснено здесь.


Я также узнал о ямочном ремонте :

создать патч : git diff dev > master.patch

применить это : patch < master.patch