2012-08-16 52 views
1

比方说,如果我有2个分支 topmaster 如果我的特性分支,并运行git rebase master它重订主或重订特性分支?git的变基混乱

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,我应该切换到master并运行git rebase -i topic

如果我跑git rebase -i topic尝试壁球A,B,C到C成为D---E---F---G---C master,我得到noop

+0

你想完成什么?当你完成后,你想让树看起来像什么?根据手册(见上文) – R0MANARMY 2012-08-16 01:24:31

+0

,这似乎是另一回合? – 2012-08-16 01:25:05

+0

您是否试图将'topic'变更为'master'? – R0MANARMY 2012-08-16 01:26:08

回答

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的变基话题结束了?

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

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

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

在当前分支中提交但不在上游中的所有更改都将保存为速度拉里区。

如果你是topic和运行git rebase master,这意味着提交A,B和C正在进入一个临时区域。

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

此时树的临时状态看起来像这样

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

先前保存到临时区域,然后再应用到当前分支的提交,一个接一个,在订购。

已保存到临时区域的提交A,B,C被“重新发送”到您当前正在使用的分支topic

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

运行从mastergit rebase topic将执行完全相同的步骤,不同之处而不是把提交A,B,C到临时区,这将令提交E,F G到暂存区。

+0

这是实现D --- E --- F --- G --- A --- B --- C主通过rebase的唯一途径??我可以只结账主人并运行'git rebase topic'吗? – 2012-08-16 01:33:18

+0

查看我的编辑..... – R0MANARMY 2012-08-16 01:36:19

+0

我明白了,这样做很有意义,所以我应该首先在本地主题分支上重新压缩以压缩提交,然后将更改合并到主然后再推送? – 2012-08-16 01:42:20