git 变基 origin/develop 对比 git 变基开发
git rebase origin/develop vs git rebase develop
假设当前分支是 MyFeatureX。并且本地 develop
分支是最新的。下面的两个陈述是等价的吗?
推荐的语法是什么?
git rebase origin/develop
git rebase develop
请注意:这个不是与git rebase origin vs.git rebase origin/master
相同的问题
如果 develop
指向与 origin/develop
相同的提交,那么这两个命令完全相同。我倾向于使用 origin/develop
以防我忘记更新我的本地 develop
(假设这个分支最终将被推送到 origin/develop
)。
正如我在对您之前的问题 的另一个(长)回答中所写,这两个命令都关闭了 --fork-point
模式,因此,前提是 develop
和 origin/develop
解析为相同的提交哈希,就像它们在您的问题前提中所做的那样——这两个命令将做同样的事情。
省略 <upstream>
参数会默认打开 --fork-point
,并且分支配置的上游的 reflog 中可能有很多数据。在这种情况下,他们的行为可能完全不同。通过添加显式 --no-fork-point
,您可以防止 git merge-base --fork-point
丢弃上游删除的提交。
你的本地分支 develop
tracks origin/develop
并且它们可能并不总是有相同的提交。
$ cat ~/.git/config
[remote "origin"]
url = git@something.com/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
这意味着我们有一个 "remote"(位于其他地方的存储库)任意命名为 "origin"。
您的本地 develop
分支正在跟踪来自该远程存储库的分支,并且有一个对该数据的本地引用称为 origin/develop
。在大多数情况下,我们认为这两件事总是包含相同的提交。但是,您需要显式更新本地 develop
分支以从源获取最新数据。这通常是通过拉动完成的:
$ git status
on branch develop
$ git pull
...pulls latest changes from origin
然而,git pull
实际上做了两个步骤,一个 fetch
和一个 merge
。它在幕后所做的第一步是从 origin 获取所有最新的提交,您可以使用
git fetch origin
这将更新分支 origin/develop
,但不会更新您的本地分支 develop
。
最新提交隐藏在您的本地 .git 目录中 "behind the scenes",您可以从名为 "origin/develop".
的分支中引用该目录
获取后,要实际创建本地分支 origin
,您必须执行 git merge origin/develop
。这在技术上不是合并,它将是一个 "fast forward," 意味着 git 足够聪明,可以使您的本地 origin
分支匹配 origin/develop
而无需实际合并任何东西。出于这个原因和其他原因,git.
中的合并让我大吃一惊
因此,如果您从 develop
变基,它有可能比 origin/develop
.
过时(更旧)
我个人在变基之前执行此工作流程:
git fetch --all
git rebase origin/branchname
这意味着我可以拉下所有数据,而不必过多考虑我在哪个分支上,并从远程存储库中重新设置最新代码。稍后,在 develop
分支上,一个简单的 git pull
将确保您是最新的。
假设当前分支是 MyFeatureX。并且本地 develop
分支是最新的。下面的两个陈述是等价的吗?
推荐的语法是什么?
git rebase origin/develop
git rebase develop
请注意:这个不是与git rebase origin vs.git rebase origin/master
相同的问题如果 develop
指向与 origin/develop
相同的提交,那么这两个命令完全相同。我倾向于使用 origin/develop
以防我忘记更新我的本地 develop
(假设这个分支最终将被推送到 origin/develop
)。
正如我在对您之前的问题 --fork-point
模式,因此,前提是 develop
和 origin/develop
解析为相同的提交哈希,就像它们在您的问题前提中所做的那样——这两个命令将做同样的事情。
省略 <upstream>
参数会默认打开 --fork-point
,并且分支配置的上游的 reflog 中可能有很多数据。在这种情况下,他们的行为可能完全不同。通过添加显式 --no-fork-point
,您可以防止 git merge-base --fork-point
丢弃上游删除的提交。
你的本地分支 develop
tracks origin/develop
并且它们可能并不总是有相同的提交。
$ cat ~/.git/config
[remote "origin"]
url = git@something.com/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
这意味着我们有一个 "remote"(位于其他地方的存储库)任意命名为 "origin"。
您的本地 develop
分支正在跟踪来自该远程存储库的分支,并且有一个对该数据的本地引用称为 origin/develop
。在大多数情况下,我们认为这两件事总是包含相同的提交。但是,您需要显式更新本地 develop
分支以从源获取最新数据。这通常是通过拉动完成的:
$ git status
on branch develop
$ git pull
...pulls latest changes from origin
然而,git pull
实际上做了两个步骤,一个 fetch
和一个 merge
。它在幕后所做的第一步是从 origin 获取所有最新的提交,您可以使用
git fetch origin
这将更新分支 origin/develop
,但不会更新您的本地分支 develop
。
最新提交隐藏在您的本地 .git 目录中 "behind the scenes",您可以从名为 "origin/develop".
的分支中引用该目录获取后,要实际创建本地分支 origin
,您必须执行 git merge origin/develop
。这在技术上不是合并,它将是一个 "fast forward," 意味着 git 足够聪明,可以使您的本地 origin
分支匹配 origin/develop
而无需实际合并任何东西。出于这个原因和其他原因,git.
因此,如果您从 develop
变基,它有可能比 origin/develop
.
我个人在变基之前执行此工作流程:
git fetch --all
git rebase origin/branchname
这意味着我可以拉下所有数据,而不必过多考虑我在哪个分支上,并从远程存储库中重新设置最新代码。稍后,在 develop
分支上,一个简单的 git pull
将确保您是最新的。