假设当前分支是myFeaturex。而且本地的分支是最新的,并且有来源。以下两个陈述是否等效?
推荐的语法是什么?
git rebase origin/develop
git rebase develop
请注意:这与git rebase origin vs.git rebase origin/master
最佳答案
您的本地分支develop
跟踪origin/develop
并且它们可能并不总是具有相同的提交。
$ cat ~/.git/config
[remote "origin"]
url = [email protected]/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
这意味着我们有一个任意命名为“来源”的“远程”(生活在其他地方的存储库)。
您的本地
develop
分支正在从远程存储库跟踪分支,并且有一个称为origin/develop
的数据的本地引用。在大多数情况下,我们认为这两件事总是包含相同的承诺。但是,您需要显式更新本地的分支以从源站获取最新数据。这通常是通过拉动来完成的:$ git status
on branch develop
$ git pull
...pulls latest changes from origin
然而,
develop
实际上有两个步骤:agit pull
和afetch
。它在后台执行的第一步是从源站获取所有最新的提交,您可以使用这些提交git fetch origin
这将更新分支,但不会更新本地分支。
最新的提交隐藏在本地.git目录中的“幕后”,您可以从名为“origin/develope”的分支中引用它。
在获取之后,要使您的本地分支真正成为
merge
,您必须执行origin/develop
。从技术上讲,这不是一个合并,而是一个“快进”,这意味着Git足够聪明,可以让您的本地分支匹配而不需要实际合并任何内容。出于这个原因和其他原因,合并让我在吉特发疯。因此,如果您重新设置
develop
的值,它有可能会过期(比origin
更旧)。我在重新平衡之前亲自执行此工作流:
git fetch --all
git rebase origin/branchname
这意味着我可以将所有数据拉下来,而不必过多地考虑我所在的分支,并从远程存储库中重新获取最新的代码。稍后,在
git merge origin/develop
分支上,一个简单的origin
将确保您是最新的。