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