Git pull不';无法获得新标记和新分支,但git fetch可以
当我的同事告诉我他已经把标签往上推了,并且它们在回购协议中的位置时,我很难让他重新创建标签。直到我使用git fetch时,我才能得到新的标记,并实际通知我创建了一个新分支。我知道git pull基本上是git fetch和git merge,所以我想知道为什么它没有得到最新的更改。以下是两种情况:Git pull不';无法获得新标记和新分支,但git fetch可以,git,Git,当我的同事告诉我他已经把标签往上推了,并且它们在回购协议中的位置时,我很难让他重新创建标签。直到我使用git fetch时,我才能得到新的标记,并实际通知我创建了一个新分支。我知道git pull基本上是git fetch和git merge,所以我想知道为什么它没有得到最新的更改。以下是两种情况: git pull origin dev From ******.****.*****/******* * branch dev -> FETCH_HEAD
git pull origin dev
From ******.****.*****/*******
* branch dev -> FETCH_HEAD
Already up-to-date.
git fetch
From ****.****.com:*******/*******
ae06d29..958f332 master -> origin/master
* [new branch] task-Q -> origin/task-Q
* [new tag] demo_5-21 -> demo_5-21
* [new tag] demo_5_27 -> demo_5_27
我遗漏了什么吗?看看我们看到的:
'git pull'[选项][…]]
运行git pull origin dev
时,指定要从远程origin
拉取refspecdev
。由于您特别要求使用dev
分支,因此不会提取其他分支或标记
相反,尝试git-pull--all是:“git-pull”是一个“git-fetch”;git合并' 否:“git fetch--all”不会提取标记 您的
git-pull-origin-dev
只获取了远程dev分支。如果您键入了git pull
或git pull origin
,您将得到新的分支。。。取决于配置。获取的内容受三个因素控制,您可能利用了最后一个因素:
命令行:虽然git pull--tags
可以工作,但它不一定会获取跟踪分支。。。git提醒您使用git fetch--tags
。这会获取同事的标签,但不会获取任何分支
$ git pull --tags
. . .
Fetching tags only, you probably meant:
git fetch --tags
远程/分支提取配置:使用裸git-fetch
或git-fetch-origin
远程和分支配置控制行为。这些没有发挥作用:
$ git config remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
$ git config --get-regexp 'branch.master*'
branch.master.remote origin
branch.master.merge refs/heads/master
上游分支/标签历史记录:根据文件第二段
默认情况下,指向正在获取的历史记录的任何标记都是
也被带走了;其效果是获取指向该分支的标记
你对我感兴趣
这意味着,当您的同事在其历史记录中推送带有新标记的分支时,您的git fetch
获取了新分支和新标记。实际上,--all
标志获取了所有远程设备(如果您的远程设备不是“origin”,那么git将获取每个远程设备)。我在下面添加了另一个答案来解释。