如何在没有提交的情况下合并到分支中?

时间:2018-12-20 04:57:16

标签: git

假设我有branch1,并从中创建了一个新的branch2。我两次承诺branch2。如何在没有任何branch1存在的证据的情况下将branch2还原到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 :(得分:1)

  

在git分支中,只有要提交的指针

您只需要执行以下操作:

git checkout branch1
git merge branch2

如果您尚未向branch1提交任何新内容,它将合并而无需任何合并提交(通过git优化)。

在正常情况下,git应该始终创建一个合并提交。但是在这种特殊情况下,自创建子分支以来,父分支未进行任何提交,它只是更新引用。

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

合并后:

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

如果在这里您想进行合并提交,请使用--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 

在上述情况下,将形成新的合并提交,并使用其引用更新branch1。

答案 1 :(得分:1)

在您的情况下,您可以简单地将branch1重置为branch2当前指向的对象,然后删除branch2:

git checkout branch1 -B branch2
git branch -D branch2

更一般的答案是首先将branch2重新建立在branch1的基础上(在您的情况下,这不会做任何更改,因为branch1在branch2分支之后没有完成提交)