以下 post 命令应该对远程分支产生相同的输出,但是
git fetch
git branch -a
显示执行时不可见的远程分支
git ls-remote --heads origin
这种行为的原因是什么?
[澄清]
(TA216441) $ git pull
Your configuration specifies to merge with the ref 'refs/heads/TA216441'
from the remote, but no such ref was fetched.
(TA216441) $ git fetch
(TA216441) $ git branch -a
* TA216441
TA216442
master
remotes/origin/HEAD -> origin/master
remotes/origin/TA212425
remotes/origin/TA216441
remotes/origin/TA219346
remotes/origin/TA220305
remotes/origin/TA223738
remotes/origin/master
(TA216441) $ git ls-remote --heads origin
hash-1 refs/heads/DE18756_2
hash-2 refs/heads/TA212425
hash-2 refs/heads/TA219346
hash-3 refs/heads/TA220305
hash-4 refs/heads/master
运行
git branch -a
会列出所有本地分支和跟踪分支,它们都存在于您的计算机上。 这是我跑步时得到的结果git branch -a
:master
branch1
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/branch1
但是,当您运行
git ls-remote --heads origin
时,它会列出存储库中的
remote头引用。 对于同一个仓库,这就是我所看到的:
b9e515799... refs/heads/master
9a7faebd1... refs/heads/branch1
存储库仅具有真正的远程分支,这就是您在使用
git pull
之类的东西时实际同步的内容。
git fetch
git branch --remotes | wc -l
40
git ls-remote --heads | wc -l
12
所以我的本地结帐有许多远程分支
no longer exist
在远程!
要解决此问题,您可以运行以下命令:git remote update --prune
运行后,
git branch --remotes
显示与
git ls-remote --heads
相同的分支。TLDR; 是git ls-remote --heads
是列出远程分支的更可靠方法!
git fetch --prune
:
-p
、
在获取之前,请删除遥控器上不再存在的任何远程跟踪引用。--prune