Git pull 不会获得新标签和新分支,但 git fetch 会



当他告诉我他已经将它们推高并且它们在存储库中的位置时,我很难尝试获取我的同事新创建的标签。直到我使用 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 pullgit pull origin您将获得新分支...取决于配置。 获取的内容由三件事控制,您可能利用了最后一件事:

命令行:虽然git pull --tags有效,但它不一定会获取跟踪分支......git 提醒您使用git fetch --tags. 这将获取您同事的标签,但不会获取任何分支。

$ git pull --tags
. . .
Fetching tags only, you probably meant:
    git fetch --tags

远程/分支提取配置:使用裸git fetchgit 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将获得新分支和新标签。

最新更新