列出远程分支 - git Branch -a 与 git ls-remote --heads origin

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

以下 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 github
2个回答
6
投票

运行

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

之类的东西时实际同步的内容。

    


0
投票

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
在获取之前,请删除遥控器上不再存在的任何远程跟踪引用。

    

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