git rebase混乱

时间:2012-08-16 01:14:53

标签: git branch rebase

让我们说如果我有2个分支机构 topmaster 如果我在功能分支上,并运行git rebase master它是否会为主分支或rebase主题分支?

git rebase --help给了我这个

假设存在以下历史记录,并且当前分支是“主题”:

             A---B---C topic
            /
       D---E---F---G master

从这一点来看,以下任一命令的结果:

       git rebase master
       git rebase master topic

将是:

                         A'--B'--C' topic
                        /
           D---E---F---G master

注意:后一种形式只是git checkout主题的简写,然后是git rebase master。当rebase退出时,主题仍将是签出分支。

如果我想实现这个D---E---F---G---A---B---C master,我应该切换到掌握并运行git rebase -i topic吗?

如果我运行git rebase -i topic尝试将A,B,C压缩为C成为D---E---F---G---C master,我会noop

1 个答案:

答案 0 :(得分:2)

假设您从一棵看起来像这样的树开始

         A---B---C topic
        /
   D---E---F---G master

您需要运行2个命令git rebase master才能使其看起来像这样

                     A'--B'--C' topic
                    /
   D---E---F---G master

然后从master运行git merge topic,这将进行快进合并,你将得到一个看起来像这样的树

                             topic
                            /
   D---E---F---G---A---B---C -- master

  

我可以结帐主人并运行 git rebase主题 ??

运行该命令将导致树看起来像这样

                             topic
                            /
   D---A---B---C---E---F---G -- master

这是rebase的(有点编辑的)git文档,希望这会有所帮助:

  

当前分支中提交但不在上游中的提交所做的所有更改都会保存到临时区域。

如果您在topic并且运行git rebase master,则意味着提交A,B和C将进入临时区域。

  

当前分支重置为上游。这与git reset --hard upstream 具有完全相同的效果。

此时树的临时状态如下所示

                 topic
                /
   D---E---F---G -- master
  

先前保存到临时区域的提交将按顺序逐个重新应用于当前分支。

保存到临时区域的A,B,C被“重新发送”到您当前所在的分行topic

                             topic
                            /
   D---E---F---G---A---B---C -- master

git rebase topic运行master将执行完全相同的步骤,除了不将提交A,B,C放入临时区域,它会将提交E,FG放入临时区域。 / p>