Git 如何在没有提交的情况下合并到分支中?
假设我有Git 如何在没有提交的情况下合并到分支中?,git,Git,假设我有branch1,我用它创建了一个新的branch2。我向branch2提交了两次。在没有任何证据表明存在branch2的情况下,如何将branch2返回到branch1 图表: 初始状态: E---F branch2 / A---B---C---D branch1 通缉国: A---B---C---D---E---F branch1 但我得到的是这样的东西: A---B---C---D---E---F---(M)
branch1
,我用它创建了一个新的branch2
。我向branch2
提交了两次。在没有任何证据表明存在branch2
的情况下,如何将branch2返回到branch1
图表:
初始状态:
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命令
在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
在这种情况下,您希望有一个merge-commit,所以merge-with--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。在您的情况下,只需将branch1重置为branch2当前指向的对象,然后删除branch2:
E---F branch2
/
A---B---C---D branch1
git checkout branch1 -B branch2
git branch -D branch2
更一般的答案是首先在branch1之上重新设置branch2的基础(在您的情况下,这不会改变任何事情,因为branch1在branch2分支之后没有进行提交)删除
branch1
,并将branch2
重命名为branch1
命令行Git在默认情况下执行您想要的操作。显然,不管出于什么原因,您的GUI都会覆盖命令行。from branch1(at G):git cherry pick E F