You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Git匹配分支的编号列表选择并自动检出

如何实现Git匹配分支的编号列表选择并自动检出

当然可以实现!我之前也碰到过这种多个分支匹配的麻烦场景,写个简单的脚本或者用个小工具就能搞定。下面给你两种实用方案,按需选择~

方案一:纯Bash脚本(无需额外工具)

这个脚本完全依赖Bash和Git自带的命令,不需要安装任何额外工具,适合所有环境。它会先搜索匹配的分支,自动判断数量:没有匹配就提示,只有一个就直接检出,多个的话就显示编号列表让你选择。

脚本代码

#!/bin/bash

# 检查是否传入了搜索关键词
if [ $# -eq 0 ]; then
    echo "请传入要搜索的分支关键词,比如:$0 feature"
    exit 1
fi

SEARCH_TEXT="$1"

# 获取匹配的分支列表,去掉开头的*(当前分支标记),整理成数组
branches=()
while IFS= read -r line; do
    branch=$(echo "$line" | sed 's/^[* ]*//')
    branches+=("$branch")
done < <(git branch | grep "$SEARCH_TEXT")

# 处理不同匹配情况
if [ ${#branches[@]} -eq 0 ]; then
    echo "没有找到包含'$SEARCH_TEXT'的分支"
    exit 1
elif [ ${#branches[@]} -eq 1 ]; then
    echo "找到唯一匹配的分支:${branches[0]},自动检出..."
    git checkout "${branches[0]}"
    exit 0
fi

# 多个分支时显示编号列表
echo "找到多个包含'$SEARCH_TEXT'的分支,请选择编号:"
for i in "${!branches[@]}"; do
    echo "$((i+1)). ${branches[$i]}"
done

# 获取用户输入并验证合法性
read -p "请输入要检出的分支编号:" selection
if ! [[ "$selection" =~ ^[0-9]+$ ]] || [ "$selection" -lt 1 ] || [ "$selection" -gt ${#branches[@]} ]; then
    echo "无效的编号,请输入1到${#branches[@]}之间的数字"
    exit 1
fi

# 检出选中的分支
selected_index=$((selection-1))
echo "正在检出分支:${branches[$selected_index]}"
git checkout "${branches[$selected_index]}"

使用方法

  1. 把上面的代码保存为checkout-by-search.sh文件;
  2. 给脚本添加执行权限:chmod +x checkout-by-search.sh;
  3. 运行脚本并传入搜索关键词:./checkout-by-search.sh 你的搜索文本,比如./checkout-by-search.sh feature。

方案二:用fzf实现交互式选择(更快捷)

如果你经常处理这类分支选择场景,推荐安装fzf——一个超级好用的交互式模糊搜索工具,能让这个操作变得更高效。

实现命令

如果已经安装了fzf,直接用这条命令就能完成搜索+选择+检出:

git checkout $(git branch | fzf --query="你的搜索文本" --prompt="选择要检出的分支: ")

或者更灵活,直接让fzf帮你实时过滤分支,你可以边输入关键词边筛选:

git checkout $(git branch | fzf --prompt="选择要检出的分支: ")

安装fzf

  • Debian/Ubuntu系统:sudo apt install fzf
  • macOS系统:brew install fzf
  • 其他系统:通过系统对应的包管理器查找安装即可,大多都能直接搜到。

备注:内容来源于stack exchange,提问作者AlexBerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:49:33