Должен ли я объединить мастер в ветку, а затем объединить обратно в мастер?
У меня есть следующие ветки:
-
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
Мне нравится этот подход:
- Это просто.
- Легко обновляется с помощью ветвей.
- Устраняет комманды слияния, потому что конфликты разрешаются при перезагрузке.
Я применил это довольно долгое время, и, похоже, он подходит к тому, что вы пытаетесь выполнить.