我必须';拉动';要将最新版本合并到我在git的本地分支中?
请原谅我对git的肤浅理解,但我经常看到这种模式,我想知道这是否必要。我看到有人这样做(在我必须';拉动';要将最新版本合并到我在git的本地分支中?,git,Git,请原谅我对git的肤浅理解,但我经常看到这种模式,我想知道这是否必要。我看到有人这样做(在mydev分支工作,该分支是从master分支而来的): 您能否通过以下方式实现同样的目标: git fetch git merge master 甚至: git merge origin/master 有两个概念在起作用,两种类型的合并正在发生。第一种类型的合并是在执行前两个命令时发生的合并: git checkout master git pull git checkout my-dev-bran
mydev分支
工作,该分支是从master
分支而来的):
您能否通过以下方式实现同样的目标:
git fetch
git merge master
甚至:
git merge origin/master
有两个概念在起作用,两种类型的合并正在发生。第一种类型的合并是在执行前两个命令时发生的合并:
git checkout master
git pull
git checkout my-dev-branch
git merge master
假设您的pull策略设置为合并(而不是重新基址),在master
分支上执行git pull
将首先从远程master
获取任何更改,然后将它们合并到该分支的本地副本中
执行以下两个命令时,将发生第二次合并:
git checkout master
git pull
git checkout my-dev-branch
git merge master
这将切换到mydev分支
,然后将本地master分支合并到其中
现在事情变得有趣了。假设您这样做:
git checkout master
git fetch
git merge origin/master
事实证明,这与你最初做的事情是一样的:
git checkout master
git pull
运行git fetch
将更新跟踪远程数据的特殊本地分支。在master
的情况下,我希望这个分支被称为origin/master
。因此,通过将此远程跟踪分支合并到本地主机中
,您实际上是在做与合并远程相同的事情。git pull
定义为组合的git fetch
,然后是git merge
(参数或配置覆盖默认值时除外)。明确地说:
将远程存储库中的更改合并到当前分支中。在默认模式下,git-pull
是git-fetch
的缩写,后跟git-merge-fetch\u-HEAD
建议不要使用git pull
。原因从剥夺您的学习机会(这将导致更好地理解和使用git)到它自动创建一个相对糟糕的合并提交。底线是,它有能力在幕后做足够多的事情,很难确切知道最终结果会是什么。也许最重要的是,它剥夺了您检查提交并选择如何最好地将其与本地更改集成的机会
git merge origin/master
本身无法替换git pull
。原因很简单:它不会执行提取origin/master
实际上并没有引用远程存储库中的分支。它是本地存储的提交的本地引用,元数据指示它应该镜像远程存储库中的分支,因此对远程存储库的更改必须在origin/master
中可用之前获取
但是,如果将主分支
配置为其跟踪分支为原始/主分支
,则git merge
和git merge原始/主分支
是等效的:
如果命令行没有提交,则合并当前分支配置为用作其上游的远程跟踪分支
()
因此,如果前面有一个fetch,那么这将是等效的。不过,它不太方便,而且更容易出错。我建议做git-pull--rebase
仔细阅读他在做什么。这里实际上发生了两次合并(假设他的拉动策略不使用重基)。