列出远程分支 - git branch -a vs git ls-remote --heads origin

6

以下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
1个回答

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时,它会列出你的仓库中的远程头引用。对于同一个仓库,我看到了以下内容:

b9e515799... refs/heads/master
9a7faebd1... refs/heads/branch1

仓库只有真正的远程分支,这就是你使用git pull等命令同步时实际同步的内容。


看起来分支已经被删除了,但是git branch -a命令并不会检查该分支是否真的存在于远程。 - Bartek
@BartekWichowski:正确的是:git branch -a本地运行,从不联系另一个Git。git ls-remote调用其他Git并询问其问题。请注意,如果您愿意,可以运行git fetch --prune origin让您的Git呼叫origin处的Git,下载任何新提交,更新您的本地副本,并 - 这是“修剪”部分 - 删除您对于他们不再拥有的分支的远程跟踪分支,即“修剪”您的origin / *远程跟踪分支。 - torek
@BartekWichowski(续)如果您希望默认情况下发生这种情况,可以进行设置。搜索 git config 文档 中的“prune”一词。 - torek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接