Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git重基混淆_Git_Branch_Rebase - Fatal编程技术网

git重基混淆

git重基混淆,git,branch,rebase,Git,Branch,Rebase,假设我有两个分支 topic和master 如果我在topicbranch上,运行git-rebase-master它是重新设置master的基础还是重新设置topic分支的基础 执行git rebase--help给了我这个 假设存在以下历史记录,且当前分支为“主题”: 从这一点开始,将显示以下命令之一的结果: git rebase master git rebase master topic 将是: A'--B'

假设我有两个分支
topic
master
如果我在
topic
branch上,运行
git-rebase-master
它是重新设置master的基础还是重新设置topic分支的基础

执行git rebase--help给了我这个

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

从这一点开始,将显示以下命令之一的结果:

       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主控
,我应该切换到主控并运行
git-rebase-I主题


如果我运行
git-rebase-I-topic
尝试将A、B、C挤压成
D--E--F--G--C master
,我会得到
noop

,假设你从这样的树开始

         A---B---C topic
        /
   D---E---F---G master
                     A'--B'--C' topic
                    /
   D---E---F---G master
                             topic
                            /
   D---E---F---G---A---B---C -- master
                             topic
                            /
   D---A---B---C---E---F---G -- master
                 topic
                /
   D---E---F---G -- master
您需要运行两个命令
git-rebase-master
,使其看起来像这样

         A---B---C topic
        /
   D---E---F---G master
                     A'--B'--C' topic
                    /
   D---E---F---G master
                             topic
                            /
   D---E---F---G---A---B---C -- master
                             topic
                            /
   D---A---B---C---E---F---G -- master
                 topic
                /
   D---E---F---G -- master
然后从
master
运行
git-merge-topic
,它将执行一个快速向前的合并,最后您将得到一个如下所示的树

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

我可以签出master并运行git rebase主题吗

运行该命令将生成如下所示的树

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

这是用于
rebase
的(经过编辑的)git文档,希望这将有助于:

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

如果您在
主题上运行
git-rebase-master
,这意味着提交A、B和C将进入一个临时区域

当前分支重置为上游。这与git重置的效果完全相同——硬上游

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

         A---B---C topic
        /
   D---E---F---G master
                     A'--B'--C' topic
                    /
   D---E---F---G master
                             topic
                            /
   D---E---F---G---A---B---C -- master
                             topic
                            /
   D---A---B---C---E---F---G -- master
                 topic
                /
   D---E---F---G -- master
以前保存到临时区域中的提交将依次重新应用到当前分支

保存到临时区域的提交A、B、C将“重新提交”到您当前所在的分支
主题

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

master
运行
git-rebase-topic
将执行完全相同的步骤,除了不将提交A、B、C放入临时区域,而是将提交E、F G放入临时区域。

您试图实现什么?当你完成后,你想让树看起来像什么?根据手册(见上文),它似乎是相反的?你是否试图将
主题
的更改拉到
主控
?是的,谢谢,请查看编辑后的问题。这是通过rebase实现D---E---F---G---A---B---C主控的唯一方法吗??我可以签出master并运行
git-rebase-topic
?我明白了,这很有意义,所以我应该首先在本地主题分支上重新设置基址以挤压提交,然后将更改合并到master,然后再推送吗?是的,您应该清理主题分支上的历史记录,然后合并回master。