-
-
Save fritz-c/c1e528b09bc1c0827a3c to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash | |
# Source: https://gist.github.com/fritz-c/c1e528b09bc1c0827a3c | |
# Original: https://gist.github.com/jordan-brough/48e2803c0ffa6dc2e0bd | |
# Download this script as "git-recentco" (no extension), chmod it to be executable and put it in your | |
# path somewhere (e.g. /usr/bin). You can then use it via `git recentco` from inside any git repo. | |
# Example: | |
# | |
# $ git recentco -n 5 | |
# 1) master | |
# 2) stable | |
# 3) develop | |
# 4) some-cool-feature | |
# 5) feature/improve-everything | |
# Choose a branch: 3 | |
# Switched to branch 'develop' | |
usage() | |
{ | |
echo "usage: git recentco [-n lines]" | |
} | |
while getopts "hn:" opt; do | |
case $opt in | |
h) | |
usage | |
exit 1 | |
;; | |
n) | |
NUM=$OPTARG | |
;; | |
\?) | |
usage | |
exit 1 | |
;; | |
esac | |
done | |
NUM=${NUM-10} # default to 10 lines | |
# This: `awk ' !x[$0]++'` removes duplicates. See http://stackoverflow.com/questions/11532157 | |
UNIQUE_BRANCHES=$(git reflog | egrep -io "moving from ([^[:space:]]+)" | awk '{ print $3 }' | awk ' !x[$0]++') | |
# Exclude branches that don't exist locally | |
BRANCH_CHOICES=( $(echo "$UNIQUE_BRANCHES" | while read line; do | |
git rev-parse --verify "$line" &>/dev/null && echo "$line" | |
done | head -n "$NUM") ) | |
PS3="Choose a branch: " | |
select d in "${BRANCH_CHOICES[@]}"; do test -n "$d" && break; echo ">>> Invalid Selection"; done | |
git checkout "$d" |
@aalvarado All the code from
# Exclude branches that don't exist locally
onward.
The original just lists them; this filters down to only local branches and offers the choice to check them out.
ah great, thank you
Thanks @fritz-c! I've updated my script to incorporate that idea and I've listed you as a contributor in the script.
Lmk if you have any thoughts/suggestions.
@fritz-c Would you be okay with officially releasing your contribution to the script as open-source? I've asked @jordan-brough separately to release it under the MIT license.
@cool-RR yes, I’m fine with making it open source. I don’t need credit or anything.
@jordan-brough Just noticed your comment a couple days late 😅 I checked out your updated script and it looks great. Thank you for including me in the contributors.
fork to show in 1 column in select and handle 'q' option for quitting https://gist.github.com/vorpal56/fd4a688a7ed6a84ed1716b0095ff1da6
What's the difference between this one and the original?