####################################### # 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"