Должен ли я объединить мастер в ветку, а затем объединить обратно в мастер?

У меня есть следующие ветки:

  • master
  • test1, который был создан из master
  • test2, который также был создан из master.

Я сделал несколько коммитов в ветки test1, а также, так как я создал ветвь test1, я создал несколько коммитов на master.

Также существуют транзакции на test2, которые я намерен позже объединить в master.

Теперь подумайте, что мне нужны мои изменения от master и, если возможно, от test2 на test1.

Я хочу знать, могу ли я объединить master в test1, поэтому я получаю коммиты от master на test, и после того, как я закончу свою функцию на test1, снова слейте ее в master. Это возможно? Или это вызовет конфликты?

Можно ли объединить также test2 в test1, затем слить test2 в master и, наконец, слить test1 в master?

Будет ли Git понимать, что некоторые коммиты уже объединены в ветку, которая сливается?

Ответы

Ответ 1

Я хочу знать, могу ли я объединить MASTER в TEST1, поэтому я получаю коммиты от мастера на тест, и после того, как я закончу свою функцию на test1, снова слияние с MASTER. это возможно? или это вызовет конфликты?

Вот как это делается. Вы можете столкнуться при объединении master в test1, который вы должны решить вручную. После этого вы сможете объединить test1 в мастер без конфликтов.

Если это возможно, можно объединить также test2 в test1, следующий тест слияния2 в master и следующий тест слияния1 в master?

Возможно, но не рекомендуется. Вместо этого объедините мастер в test2, затем test2 вернитесь к мастеру. (То же самое, что вы сделали для test1.)

После этого все ваши изменения должны быть в главном.

Будет ли git понимать, что некоторые коммиты уже объединены в ветку, которая сливается?

Да, в отличие от SVN, git знает о таких коммитах.

Ответ 2

Чтобы всегда быть в курсе и не создавать конфликтов при слиянии с ним, вы можете сделать следующее:

git checkout test1
git rebase master

На этом этапе вы будете в курсе мастера и сделаете свои коммиты на test1 поверх него.

rebase будет делать следующее:

  • Выберите все фиксации на test1 после того, как она отличается от мастера и помещена во временную область.
  • Выберите все фиксации от мастера после точки, отличной от test1, и доведите их до test1. На данный момент обе ветки обновлены.
  • Затем он подберет test1 из временной области и применит их поверх test1. На этом этапе test1 будет обновляться с мастером и имеет свои полномочия на вершине. Когда это произойдет, появится любой конфликт, который может существовать, и вы можете разрешить их.

После этого слияние назад с мастером будет быстрой перемоткой вперед.

git checkout master
git merge test1

Мне нравится этот подход:

  • Это просто.
  • Легко обновляется с помощью ветвей.
  • Устраняет комманды слияния, потому что конфликты разрешаются при перезагрузке.

Я применил это довольно долгое время, и, похоже, он подходит к тому, что вы пытаетесь выполнить.