假设我有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命令。
答案 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分支之后没有完成提交)