Объединение из магистрали в ветку, но только файлы в ветке - PullRequest
5 голосов
/ 26 марта 2020

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

Можно ли каким-то образом объединить из транка только те файлы, которые у меня есть в ветке?

Например, до слияния:

Trunk
  File 1
  File 2
  File 3
  File 4
Branch
  File 2
  File 3

После слияния у меня следующее что я не хочу. Я хочу объединить только Файл 2 и Файл 3 из транка.

Branch
  File 1
  File 2
  File 3
  File 4

Ответы [ 2 ]

5 голосов
/ 01 апреля 2020

Расширяя подход @ jthill, я бы сделал

git merge --no-commit --no-ff trunk
git diff --name-only -z --diff-filter=A @ | xargs -0 git rm -f
rm .git/MERGE_*
git commit

Это заставило бы git забыть, что выполняется слияние, и не позволит удалить файлы, когда вы, наконец, захотите слить обратно в свой ствол.

В качестве комментария, однако, это не очень устойчивый рабочий процесс, даже если вы пишете свой собственный скрипт, чтобы автоматически делать это каждый раз. Стоит задать вопрос, почему вы чувствуете, что должны это сделать.

Возможно, что: - репо слишком велико - тогда вы должны подумать о разделении кода - ваша работа логически разделена - тогда вам непременно стоит подумать о разделении кода - там сломано работать в транке - тогда вы должны внедрить новый рабочий процесс, который не объединит сломанный код в транк

Альтернативные решения, если вы не хотите изменять свой рабочий процесс, будут:

Если Вы хотите полностью перезаписать изменения

git checkout trunk -- *
git commit

Если вы хотите полностью перезаписать некоторые файлы

git checkout trunk -- file2
git commit

Или, интерактивная перебазировка дает вам возможность выбрать только те коммиты, которые вы хотите. Это также не приведет к удалению файлов позже

git rebase -i trunk

Лично я бы посмотрел на изменение вашего рабочего процесса. Если у вас есть дополнительная информация о вашей ситуации, мы сможем помочь вам найти другие решения.

5 голосов
/ 31 марта 2020
git merge --no-commit --no-ff trunk
git diff --name-only -z --diff-filter=A @ | xargs -0 git rm -f
git commit
...