当他告诉我他已经将它们推高并且它们在存储库中的位置时,我很难尝试获取我的同事新创建的标签。直到我使用 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' [options] [<repository> [<refspec>...]]
当您运行git pull origin dev
时,您指定要从远程origin
拉取 refspec dev
。由于您专门请求dev
分支,因此不会拉取其他分支或标签。
相反,请尝试git pull --all
。
是的:"git pull"是"git fetch; git merge"。
否:"git fetch --all"默认情况下不会在没有"--tags"的情况下获取所有标签...它将获取可访问的标签,请参阅下面我答案的第三部分。
同样:"git push"默认情况下不会在没有"--tags"的情况下推送标签。
您的git pull origin 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 文档的第二段
默认情况下,指向正在获取的历史记录的任何标记都是也取;效果是获取指向分支的标签你有兴趣。
这意味着,当您的同事推送历史记录中包含新标签的分支时,您的git fetch
将获得新分支和新标签。