需要 Git rebase 参数上下文解释

标签 git github

git rebase 经常在某些分支的上下文中使用。例如,如果我想将 feature 分支的基础移动到 master 分支之上(基于最新的提交)——教程说:

git checkout feature
git rebase master 

在这样的教程之后,有很多问题。例如:如何在不 checkout 的情况下执行相同的操作。我如何使用 --onto 选项执行相同的操作。 --onto 和 rebase 有什么区别。我可以传递一系列提交还是必须是整个分支?等等。

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

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

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.

最佳答案

完整的 rebase 命令是这样的。

git rebase --onto <onto> <upstream> <branch-to-rebase>

Git 会将 branch-to-rebase 中不在 upstream 中的所有更改放在 onto 之上。

默认是...

  • branch-to-rebase:当前分支
  • upstream:branch-to-rebase 的跟踪分支
  • :上游

git checkout 功能; git rebase master 实际上是 git rebase --onto master master 特性

您通常希望 ontoupstream 相同,但有时对于精密手术而言它们不同很有用。 upstreamonto 之间的区别在这个例子中很清楚。

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

如果您git rebase master topic,它将对topicmaster 没有共同点的所有提交进行rebase。所有介入的分支负责人都将被忽略。即 E、F、G、H、I 和 J。由于 onto 默认为 upstream,它将把它们放在 master 上。你会结束这个。

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

如果您只想从next 提交到topic 怎么办?这就是 --onto 有用的地方。告诉 Git 上游是 next,但你想 rebase 到 master。所以运行 git rebase --onto master next topic。这将只选择 H、I 和 J。

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

关于需要 Git rebase 参数上下文解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553077/

相关文章:

github - 如何使用 Jenkins 管道将测试覆盖率发布到 Github 拉取请求?

git - 无法从 GitHub fork 存储库 check out 分支

html - 我的 Gitlab 存储库上的默认页面出现 404 错误

macos - 提交时如何在 vim 中获得 git diff 着色?

git - 如何恢复到文件的原始主分支版本

git - Jenkins : stderr: Permission denied (publickey). fatal: 远端意外挂断

git - 将本地分支推送到父级的远程跟踪分支

github - 使用 SonarQube Github 插件分析 Github Pull 请求时可以设置 Sonar 质量配置文件吗?

git - 如何从 Mac 卸载 Git (Apple Git-75)?

git 在推/pull 时加密/解密远程存储库文件