git rebase confusion

问题描述 投票:2回答:1

假设我有2个分支topicmaster如果我在topic分支上,并运行git rebase master,它会重新设置母版还是重新设置主题分支?

[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。重新设置基准退出时,主题将保留为已签出分支。

如果我要实现此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

git branch rebase
1个回答
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

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

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

                             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,F G放入临时区域。

© www.soinside.com 2019 - 2024. All rights reserved.