Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 rebase参数上下文解释_Git_Github - Fatal编程技术网

需要Git rebase参数上下文解释

需要Git rebase参数上下文解释,git,github,Git,Github,git rebase通常用于某个分支的上下文中。例如,如果我想根据最新提交将要素分支的基础移动到主分支的顶部,教程会说: git checkout feature git rebase master 在类似的教程之后,有很多问题。如何在不签出的情况下执行相同的操作。如何使用-on选项执行相同的操作。重新设置基址和重新设置基址之间的区别是什么。我可以传递一系列提交,还是必须传递整个分支?等等 我已经阅读手册页好几次了,但仍然有很大的差距 所以主要的问题是:git如何在不同的场景中解析args,

git rebase通常用于某个分支的上下文中。例如,如果我想根据最新提交将要素分支的基础移动到主分支的顶部,教程会说:

git checkout feature
git rebase master 
在类似的教程之后,有很多问题。如何在不签出的情况下执行相同的操作。如何使用-on选项执行相同的操作。重新设置基址和重新设置基址之间的区别是什么。我可以传递一系列提交,还是必须传递整个分支?等等

我已经阅读手册页好几次了,但仍然有很大的差距

所以主要的问题是:git如何在不同的场景中解析args,我应该如何在头脑中解释/想象它们?例如:

git rebase master
git rebase feature master
git rebase --onto master feature
git rebase HEAD~4 HEAD~2
git rebase --onto HEAD~4 HEAD~2
假设我们有以下回购协议:

Z -- W (HEAD, test-branch*) 

A -- B -- C -- D -- E (master)
     \
      1 -- 2 -- 3 (feature)

test-branch is checked out.

git rebase master在master之上对当前分支进行重定,这意味着master已签出,当前分支将重置为master,其提交将在master之上重定。 考虑到当前分支是测试分支:

A -- B -- C -- D -- E -- Z' -- W' (test-branch)
                 (master)
git rebase feature master在feature稀有的基础上重放master提交,最佳实践是做相反的事情 即:

A -- B
      \
       1 -- 2 -- 3 -- C' -- D' -- E' (master)
              (feature)
git rebase-on-master特性将在特性之后将所有提交移动到新的基本主机之上的当前分支。 因为特性和测试分支不相关,所以不会移动任何提交

git rebase HEAD~4 HEAD~2将当前分支重置为@~2

对于像Z-Y-X-W这样的测试分支,这意味着Z-Y

git rebase-on HEAD~4 HEAD~2将从当前分支中删除@~3和@~2,因为它会重放从@~2之后的所有提交,即@~1和@到新的base@~4。
完整的rebase命令如下所示

git rebase --onto <onto> <upstream> <branch-to-rebase>
如果git重新设置主主题的基础,它将重新设置该主题与主主题不相同的所有提交的基础。所有介入的分支头都将被忽略。也就是E、F、G、H、I和J。由于on默认为上游,所以它将把它们置于master上。你会得到这个的

           A--B--C--D master
               \     \
                \     E'-F'-G'-H'-I'-J' topic
                 \
                  E--F--G next
如果您只想从下一个主题提交,该怎么办?这就是-on变得有用的地方。告诉Git上游是下一个,但您希望在master上重新设置基础。因此,运行git-rebase-to-master下一个主题。这将只选择H、I和J

           A--B--C--D master
               \     \
                \     H'-I'-J' topic
                 \
                  E--F--G next

非常好!我需要仔细阅读。你能解释一下“上游”在这方面的含义吗?我试着翻译这个词,但没有得到任何有用的东西。@TimurFayzrakhmanov上游是分支的来源。逆流而上就像逆流而上。这里的电流是时间。如果你开始回顾分支的历史,走向另一个分支,你就是在逆流而上。在我的例子中,master是主题的上游。这对rebase意味着Git将把分支中所有不在上游的更改都放在rebase之上。不幸的是@VonC,但我没有从第二个示例开始理解您的想法。我无法想象没有模式会发生什么,如果您能给出第一个示例中的模式,我将不胜感激。@Timurfayzakhmanov我只为第二个示例添加了一个图表。
           A--B--C--D master
               \     \
                \     H'-I'-J' topic
                 \
                  E--F--G next