8000 GitHub - zacanger/git-all-branches: Better git branch -a
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
This repository was archived by the owner on Jun 17, 2025. It is now read-only.

zacanger/git-all-branches

Repository files navigation

git-all-branches

Deprecated

You can do this in a bit of Shell, no need for Node or a package. Example:

#!/bin/sh

remote="${1:-origin}"

# check if output is a terminal for color
if [ -t 1 ]; then
  reset="$(printf '\033[0m')"
  green="$(printf '\033[0;32m')"
  yellow="$(printf '\033[0;33m')"
  red="$(printf '\033[0;31m')"
else
  reset=""
  green=""
  yellow=""
  red=""
fi

# ensure we are in a Git repository
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
  exit 1
fi

# try to fetch but allow failure
git fetch --all 2>/dev/null

current_branch="$(git rev-parse --abbrev-ref HEAD)"

# get and clean remote branches
remote_branches=$(git branch -r | sed "s|^ *${remote}/||" | sed '/->/d' | sed 's/^ *//')

# get and clean local branches
local_branches=$(git branch | sed 's/^[* ]*//' | sed '/^$/d')

# combine and deduplicate all branches
all_branches=$(printf "%s\n%s\n" "$remote_branches" "$local_branches" | sort -u)

# loop through each branch and annotate
printf "%s\n" "$all_branches" | while IFS= read -r branch; do
  prefix="  "
  [ "$branch" = "$current_branch" ] && prefix="* "

  echo "$local_branches" | grep -qx "$branch" && is_local=true || is_local=false
  echo "$remote_branches" | grep -qx "$branch" && is_remote=true || is_remote=false

  if [ "$is_local" = true ] && [ "$is_remote" = true ]; then
    printf "%s%s%s (both)%s\n" "$green" "$prefix" "$branch" "$reset"
  elif [ "$is_local" = true ]; then
    printf "%s%s%s (local)%s\n" "$red" "$prefix" "$branch" "$reset"
  elif [ "$is_remote" = true ]; then
    printf "%s%s%s (remote)%s\n" "$yellow" "$prefix" "$branch" "$reset"
  fi
done

Donate

Better git branch -a

screenshot


Usage

npm i -g git-all-branches
git all-branches # or git-all-branches
# Takes an optional argument, which is the name of a remote.
# Defaults to `origin`
git all-branches upstream

LICENSE

About

Better git branch -a

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published
0