为什么`git pull`会拉取1000个远程分支到我的本地?

问题描述 投票:0回答:1

当我这样做时

git pull
它会将所有远程分支获取到我的本地分支。它将它们保存为远程跟踪分支(但这不是问题)。我认为它还获取了标签,也许还有其他东西。

我做了

(git branch -r).Length
,得到了大约
2500
,而之前要少得多。

这是因为某些配置设置/值吗?

如何防止这种情况发生?如果我在分支

foo
上,我只希望
git pull
从远程分支 foo 获取更改,而不是其他任何东西。即:

  • 如果我在分支

    foo
    跟踪远程跟踪分支
    origin/foo
    ,那么我希望
    git pull
    /
    git fetch
    仅从远程分支
    origin foo
    获取更改。

  • 如果我所在的分支

    bar
    没有跟踪任何远程跟踪分支,那么我希望
    git pull
    /
    git fetch
    不执行任何操作 - 或者可能只是通知我该分支没有跟踪来自以下位置的任何分支要获取哪个。

我怎样才能诱发这种行为?


在 PowerShell 中,我做了

git config list --show-scope | sls "fetch|pull"
并总结了下表中的输出

| file   | name                | value                                               |
|--------|---------------------|-----------------------------------------------------|
| system | pull.rebase         | false                                               |
| local  | pull.rebase         | true                                                |
|        |                     |                                                     |
| local  | remote.origin.fetch | +refs/heads/dev/jv/*:refs/remotes/origin/dev/jv/*   |
| local  | remote.origin.fetch | +refs/heads/feature/*:refs/remotes/origin/feature/* |
| local  | remote.origin.fetch | +refs/heads/hotfix/*:refs/remotes/origin/hotfix/*   |
| local  | remote.origin.fetch | refs/heads/master:refs/remotes/origin/master        |

remote.origin.fetch=+refs/heads/dev/jv/*:refs/remotes/origin/dev/jv/*
是什么意思?
+
是什么意思?

git pull
之前,
(git branch -r | sls dev/jv/).Length
1
代表
1
远程跟踪分支。

之后,是

21
代表
21
远程跟踪分支。因此,这些
20
分支中的
dev/jv/*
已被获取。

git git-pull git-config git-fetch remote-branch
1个回答
0
投票

如果我在分支 foo 上,我只想 git pull 从远程分支 foo 获取更改,而不是其他

您可能根本不应该使用

git pull
。默认情况下,
git pull
调用
git fetch
来获取所有远程分支,而你说你不想要这样。

相反,只需说

git fetch origin branch-I-want-to-fetch
。现在您已经更新了
origin/branch-I-want-to-fetch
并且可以做任何您喜欢的事情。如果目标是更新您本地的
branch-I-want-to-fetch
,那么只需进入该分支并说
git merge

© www.soinside.com 2019 - 2024. All rights reserved.