How can I hide the "pr" remote branches?

I have GitHub for Windows installed. When I run "git branch -a", it shows many remote tracking branches, and they appear to be pull requests.

One co-worker who uses Git for Windows doesn't see this, but another co-worker who also uses GitHub for Windows sees the same result.

Example: I forked "bootstrap-sass". On github.com, I used the "Clone in desktop" button. It opens GitHub for Windows, and adds the new repo to my list of local repos.

Running "git branch -a", it returns over 100 results, most of them are "/pr/#". Below is a small sample:

C:gh-uibootstrap-sass [master]> git branch -a
  bower
* master
  remotes/kenshub/2.0-stable
  remotes/kenshub/2.1-stable
  remotes/kenshub/HEAD -> kenshub/master
  remotes/kenshub/gh-pages
  remotes/kenshub/master
  remotes/kenshub/next
  remotes/origin/bower
  remotes/origin/master
  remotes/origin/pr/3
  remotes/origin/pr/4
  remotes/twbs/2.0-stable
  remotes/twbs/2.1-stable
  remotes/twbs/gh-pages
  remotes/twbs/master
  remotes/twbs/next
  remotes/twbs/pr/1
  remotes/twbs/pr/10
  remotes/twbs/pr/103

I'm guessing it's GitHub for Windows. How can I hide the "pr" remote branches? Is it a git config, or part of the "Clone in desktop" command?


When cloning a repo, don't use the "Clone in Desktop" option if you have GitHub for Windows installed. Instead, copy the clone URL and run git clone <url> through command line.

When you clone through GitHub for Windows, it is running extra commands like:

fetch origin +refs/pull/*/head:refs/remotes/origin/pr/* +refs/heads/*:refs/remotes/origin/* --prune
status --untracked-files=all --porcelain -z

If you don't want to re-clone the repo, then refer to the other answer about deleting branches, and make sure you don't have a fetch refs congif to get "/pr/" branches. View your .git/config file, or run git config --list --local .


You cannot hide, you you could delete those remote tracking branches.
Following "Can you delete multiple branches in one command with Git?", you can try something similar to:

git branch -D `git for-each-ref --format="%(refname:short)" refs/remotes/*/pr/*`

(or you can use other expressions with awk and xargs)

This is similar to deleting one remote tracking branch.

But understand that it is a temporary solution: the next fetch, if configured by default fetch = +refs/heads/*:refs/remotes/origin/* , would bring back all remotes branches.
As explained in "Git Internals - The Refspec", you can also configure multiple fetch in order to bring only the remote tracking branches that you want to see.


It is also possible to manually edit the .git/config file and don't track all upstream branches but specific ones.

[remote "upstream"]
  url = https://github.com/xyz/xyz.git
  fetch = +refs/heads/*:refs/remotes/upstream/*

Replace the '*' with specific branch name

[remote "upstream"]
  url = https://github.com/rsocket/rsocket-java.git
  fetch = +refs/heads/1.0.x:refs/remotes/upstream/1.0.x

Then you need to delete remote tracking branches one by one

git branch -d -r upstream/0.2.x

Deleting the references - this don't delete remote branches, it just removes from local.

Batch pruning - this deletes the remote branchs

链接地址: http://www.djcxy.com/p/26106.html

上一篇: 如何在Git中停止发散分支警告?

下一篇: 我如何隐藏“pr”远程分支?