Git pull没有获得新标签和新分支,但git fetch确实如此

时间:2015-06-12 23:04:09

标签: git

当他告诉我他已经把他们推了起来并且他们在回购中的位置时,我很难尝试让我的同事获得新标签。直到我使用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

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

查看git pull的概要,我们看到:

  

'git pull' [options] [<repository> [<refspec>...]]

当您运行git pull origin dev时,您指定要从远程dev提取refspec origin。由于您专门要求dev分支,因此不会提取其他分支或标记。

相反,请尝试git pull --all

答案 1 :(得分:1)

是:'git pull'是'git fetch; git merge”。

否:'git fetch --all'将不会获取标签。

您的git pull origin dev仅获取了远程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得到了新分支和新标签。