2

假设我有 2 个分支 topicmaster 如果我在topic分支上,运行git rebase master它是 rebase master 还是 rebase topic 分支?

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 topic 后跟 git rebase master 的简写。当 rebase 退出时,主题将保持签出分支。

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

如果我运行git rebase -i topictry to squash A,B,C to C to become D---E---F---G---C master,我得到noop

4

1 回答 1

3

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

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

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

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

然后从masterrun 开始git merge topic,它将进行快进合并,你最终会得到一棵看起来像这样的树

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

我可以只签出 master 并运行git rebase topic吗?

运行该命令将生成一棵看起来像这样的树

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

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

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

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

当前分支被重置为upstream这与 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 topicfrommaster将执行完全相同的步骤,除了不是将提交 A、B、C 放入临时区域,而是将提交 E、FG 放入临时区域。

于 2012-08-16T01:31:05.593 回答