Как слить в ветку без коммита? - PullRequest
0 голосов
/ 20 декабря 2018

Допустим, у меня есть branch1, и я создал новый branch2 из него.Я вверяю дважды branch2.Как перевести ветвь 2 обратно в branch1 без каких-либо доказательств существования branch2?

Диаграмма:

Исходное состояние:

                  E---F  branch2
             /
A---B---C---D  branch1

Требуемое состояние:

A---B---C---D---E---F  branch1

Но вместо этого я получаю что-то вроде этого:

A---B---C---D---E---F---(M)  branch1 with extra Merge Commit

Примечание: я использую Intellij IDEA для выполнения своих команд git.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

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

git checkout branch1 -B branch2
git branch -D branch2

Более общий ответ - сначала перебазировать Branch2 поверх ветки Branch1 (что вваш случай ничего не изменит, так как branch1 не выполняет коммит после ветки branch2)

0 голосов
/ 20 декабря 2018

В ветвях git есть только указатели для фиксации

В вашем случае вам просто нужно сделать:

git checkout branch1
git merge branch2

Он будет сливаться без коммитов слияния (оптимизацияby git) если вы не сделали ничего нового для branch1.

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

              E---F  branch2
             /
A---B---C---D  branch1

После слияния:

              E---F  branch1/branch2
             /
A---B---C---D  

Incase здесь вы хотите иметькоммит слияния, поэтому слияния с опцией --no-ff.

git checkout branch1
git merge --no-ff branch2

Если у вас был новый коммит после создания новой ветки, создание коммит слияния неизбежно.Скажем, пример:

               E---F  branch2
             /
A---B---C---D ----G  branch1

Итак, коммит слияния спасает только здесь:

              E--------F  branch2
             /         \
A---B---C---D ----G-----H(merge commit)  
                          branch1 

В вышеприведенном случае формируется новый коммит слияния и ветвь1 обновляется со ссылкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...