-
-
Save fritz-c/c1e528b09bc1c0827a3c to your computer and use it in GitHub Desktop.
Git: Check out a branch from a list of recently checked out branches/tags/commits
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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" |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ah great, thank you