How to check if remote branch exists on a given remote repository?

git

Solution

$ git ls-remote --heads git@github.com:user/repo.git refs/heads/[branch-name]
# or
$ git ls-remote --heads origin refs/heads/[branch-name]

In case `[branch-name]` is found you will get the following output:

b523c9000c4df1afbd8371324083fef218669108        refs/heads/branch-name

Otherwise no output will be sent.

So piping it to `wc` will give you `1` or `0`:

$ git ls-remote --heads git@github.com:user/repo.git refs/heads/[branch-name] | wc -l

Alternatively you can set `--exit-code` flag on `git ls-remote` which will return exit code `2` in case no matching refs are found. The result can be checked directly in a shell test or by checking the status variable `$?`.

$ git ls-remote --exit-code --heads git@github.com:user/repo.git refs/heads/[branch-name]

Note that you should prefix the `[branch-name]` with `refs/heads/` otherwise it will do partial matches, e.g. `bar` will match branches `bar` and `foo/bar`.

Problem

I need to do a subtree merge for a specific branch, if it exists on a given remote repository. The problem is that the remote repository is not checked out locally, so I can't use `git branch -r`. All I have is a remote address, something like this `https://github.com/project-name/project-name.git`. Is there a way to list remote branches just by a remote address? I couldn't find anything usefull :(

Original source

Related problems