Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git pull不';无法获得新标记和新分支,但git fetch可以_Git - Fatal编程技术网

Git pull不';无法获得新标记和新分支,但git fetch可以

Git pull不';无法获得新标记和新分支,但git fetch可以,git,Git,当我的同事告诉我他已经把标签往上推了,并且它们在回购协议中的位置时,我很难让他重新创建标签。直到我使用git fetch时,我才能得到新的标记,并实际通知我创建了一个新分支。我知道git pull基本上是git fetch和git merge,所以我想知道为什么它没有得到最新的更改。以下是两种情况: git pull origin dev From ******.****.*****/******* * branch dev -> FETCH_HEAD

当我的同事告诉我他已经把标签往上推了,并且它们在回购协议中的位置时,我很难让他重新创建标签。直到我使用git fetch时,我才能得到新的标记,并实际通知我创建了一个新分支。我知道git pull基本上是git fetch和git merge,所以我想知道为什么它没有得到最新的更改。以下是两种情况:

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
拉取refspec
dev
。由于您特别要求使用
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将获取每个远程设备)。我在下面添加了另一个答案来解释。