mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-19 21:41:07 +01:00
feat(plugin): git checkout interactive
This commit is contained in:
parent
8cbe98469d
commit
09976595be
2 changed files with 71 additions and 0 deletions
15
plugins/git-checkout-interactive/README.md
Normal file
15
plugins/git-checkout-interactive/README.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
# lol
|
||||
|
||||
This plugin adds quick switch between your branches.
|
||||
|
||||
To use it, add `git-checkout-interactive` to the plugins array in your `.zshrc` file:
|
||||
|
||||
```zsh
|
||||
plugins=(... git-checkout-interactive)
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
```sh
|
||||
gci
|
||||
```
|
|
@ -0,0 +1,56 @@
|
|||
#######################################
|
||||
# git checkout interactive #
|
||||
#######################################
|
||||
|
||||
function git-checkout-interactive() {
|
||||
# Get all branches sorted by committer date, along with their last commit hash
|
||||
local branches
|
||||
branches=$(git for-each-ref --sort=-committerdate --format='%(refname:short) %(objectname:short)' refs/heads/)
|
||||
|
||||
# Parse branches
|
||||
local branch_list=()
|
||||
local current_branch
|
||||
current_branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
if [[ "$current_branch" == "" ]]; then
|
||||
return 0
|
||||
fi
|
||||
while read -r branch hash; do
|
||||
if [[ "$branch" == "$current_branch" ]]; then
|
||||
echo "On branch $branch \n"
|
||||
else
|
||||
branch_list+=("$branch ($hash)")
|
||||
fi
|
||||
done <<< "$branches"
|
||||
|
||||
if (( ${#branch_list} == 0 )); then
|
||||
echo "No other branches available."
|
||||
return 0
|
||||
else
|
||||
echo "Select a branch to switch to:\n"
|
||||
fi
|
||||
|
||||
# Display menu
|
||||
local i=1
|
||||
for branch in "${branch_list[@]}"; do
|
||||
echo "($i) $branch"
|
||||
((i++))
|
||||
done
|
||||
echo -n "\nPlease enter your choice: "
|
||||
|
||||
# Handle user input
|
||||
while :; do
|
||||
local choice
|
||||
read -r choice
|
||||
if (( choice > 0 && choice <= ${#branch_list[@]} )); then
|
||||
local selected_branch="${branch_list[$((choice))]}"
|
||||
local target_branch="${selected_branch//->}"
|
||||
target_branch="${target_branch%% *}"
|
||||
git checkout "$target_branch"
|
||||
break
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
alias gci="git-checkout-interactive || return 0"
|
Loading…
Reference in a new issue