В моем репозитории есть одна ветка (branch_1), и в ней я вношу некоторые изменения. Затем я создал новую ветку из ветки_1, ветки_2.
Master---
\
Branch_1--commit1--commit2
\
Branch_2 (current branch)
Тем временем в Branch_1 был проведен обзор и я внес некоторые изменения:
Master---
\
Branch1--squashed commit1,commit2--commit3--commit4
\
Branch2 (current branch)
Как мне теперь применить последние изменения ветки_1 в ветке_2? Что означает объединение ветки_1 с веткой_2 и наоборот.
Отвечает ли это на ваш вопрос? Как выполнить перебазирование после сжатия коммитов в исходной ветке?
Обратите внимание: то, что вы называете Branch_1
, на самом деле будет commit2
, поскольку метка Branch_1
идентифицирует фиксацию как заголовок ветки и обновляется каждый раз, когда вы фиксируете ветку.
Технически говоря, то, о чем вы просите, - это перебазирование (что в терминах непрофессионалов означает перемещение точки, в которой вы разветвляетесь по стволу), слияние - это его надмножество.
Однако слияние Branch1
с текущей веткой (Branch2
) сделает то, что вы хотите.
Что означает объединение ветки_1 с веткой_2 и наоборот.
Это означает перенос всех изменений из одной ветки в другую. Порядок важен, именно он определяет, в какую ветку вы пишете.
Похоже, что в вашем случае изменения branch_1
уже опубликованы и доступны в удаленном репозитории, а изменения branch_2
являются локальными для вашего репозитория. В этой ситуации было бы лучше получить или извлечь новые изменения branch_1
и перебазироватьbranch_2
поверх branch_1
.
# integrating new changes into branch_1
git checkout branch_1
git pull
# integrating branch_1' changes into branch_2
git checkout branch_1
git rebase branch_1
Эта операция по сути перезапишет поверх branch_1
каждую фиксацию, сделанную branch_2
после расхождения. Таким образом, новые изменения в branch_1
будут присутствовать в branch_2
, с более линейной историей, чем при слиянии двух ветвей взад и вперед (это предполагает, что branch_2
будет объединено в branch_1
или ветку master
в какой-то момент).
Вместо этого, что касается вашего второго вопроса:
Что значит объединить ветку_1 с веткой_2 и наоборот?
Слияние просто означает объединение двух или более историй изменений с момента их расхождения. Коммит слияния, созданный после операции, становится узлом, из которого вы можете ссылаться на родительские истории в графе коммитов, что позволяет вам видеть изменения из другой ветки (branch_1
) в вашей целевой ветке (branch_2
). Цитируем документацию по команде git merge.
Включает изменения из именованных коммитов (с момента, когда их история отклонилась от текущей ветки) в текущую ветку.
Также этот подход позволит вам внести изменения branch_1
в branch_2
. Однако, как было сказано ранее, история будет выглядеть более запутанной и менее читабельной.
git checkout branch_1
git pull
git checkout branch_2
git merge branch_1
«Объединить» ничего не значит. Есть только «слияние», а затем «перебазирование». Обратите внимание, что ваше ASCII-изображение не может отражать фактическую историю Git, поскольку сжатие двух коммитов не повлияет на другие ветки.