Как выбрать и объединить только подпутьевой путь из ветви функции в мастер

0

Вопрос

У меня есть интересная проблема (по крайней мере, для меня).

У меня есть master ветвь и а feature ветвь, которая была отделена от master некоторое время назад. Другая команда продолжает обновлять master филиал и моя команда работают только над feature ветка.

То master ветка включает в себя некоторые изменения, которые не интересуют мою команду. Мы заботимся только об их app папка, вот и все. Даже в app папка, нас интересует не все, а только те изменения, которые, по нашему мнению, нам нужны. Мы не объединяем наши feature ответвление в их master потому что мы внедряем изменения в технический стек, и единственное, что нам от них нужно,-это их код JavaScript.

Тем временем мы также вносим изменения в feature филиал app папка. Так что в app папка, у них есть некоторые изменения, которых у нас нет, у нас есть некоторые изменения, которых у них нет. Мы хотим сохранить все наши изменения, но выбрать только некоторые из них.

Как я могу объединить их master филиал app папка в нашу feature филиал app папка? Я исследовал в течение нескольких часов, попробовал некоторые расширения кода VS, чтобы просмотреть разницу между двумя папками. То, что я ищу, - это интерфейс, в котором я могу принять или отклонить все, что исходит от master папка приложений филиала. Хотя это мое предпочтение, я открыт для любых предложений, которые могли бы решить эту проблему.

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

Спасибо за вашу помощь.

cherry-pick git merge
2021-11-24 00:41:33
2
1

То, что я ищу, - это интерфейс, в котором я могу принимать или отклонять все, что исходит от главной ветви app папка

git checkout -p master app это грубо, но имеет приличные шансы служить здесь.

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

git diff --merge-base @ master -- app | git apply -3

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

2021-11-24 06:42:34
1

Есть два способа сделать это. Более простой вариант сохранит изменения, но откажется от любых сделанных ими коммитов. Более сложный из них сохранит фиксации.

Рекомендация

Оба из двух методов, описанных ниже, могут привести к конфликтам слияния и другим головным болям в будущем, особенно когда люди продолжают вносить изменения в главную ветвь. Кроме того, если у вас есть изменения в приложении/ папке в ветке функций, прямое использование git apply может привести к перезаписи ваших изменений.

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

Тем не менее, вот два подхода, которые аналогичны выбору вишни только в одной папке.

Вариант 1: Отменить фиксации, сохранить изменения

Этот подход довольно прямолинеен, и он использует комбинацию git diff и git apply:

git switch feature
git diff feature..master -- app | git apply --index

Это будет:

  • Переключитесь в ветвь функций (здесь вы будете применять изменения).
  • Получите все изменения, внесенные в основную ветвь, которых нет в ветви функций.
  • Фильтровать только изменения в app каталог
  • Примените изменения с помощью git apply
  • Внесите изменения, добавив их в индекс (это то, что --index вариант делает)

Единственным недостатком этого подхода является то, что он не будет сохранять историю или фиксировать сообщения.

Оттуда вы можете самостоятельно внести изменения:

git commit -m "Apply changes made to master branch"

Вариант 2: Получите как коммиты, так и изменения

Этот немного сложнее, и он опирается на git format-patch.

git switch feature
git format-patch --stdout feature..master -- app | git am

Это будет:

  • Переключитесь в ветвь функций (где вы примените изменения)
  • Получите все изменения, внесенные в основную ветвь, которых нет в ветви функций
  • Фильтровать только по изменениям, внесенным в app каталог
  • Отформатируйте их как серию исправлений (содержащих сообщения о фиксации, авторов и т. Д.)
  • Примените все эти исправления с помощью git am

Обратите внимание, что в зависимости от содержания изменений это может привести к сбою, который вам придется устранить вручную. (Это предупредит вас об этом)

2021-11-24 21:55:27

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................