我必须';拉动';要将最新版本合并到我在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

请原谅我对git的肤浅理解,但我经常看到这种模式,我想知道这是否必要。我看到有人这样做(在
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
仔细阅读他在做什么。这里实际上发生了两次合并(假设他的拉动策略不使用重基)。