mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-27 16:20:07 +00: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