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