尧图精选

git-extras 完全指南:Git 增强命令集、安装部署与默认分支迁移实践

🕒 发布时间:2026/10/1 16:56:28 📁 来源:尧图网络
开发工具CLI版本控制【免费下载链接】git-extrasGIT utilities -- repo summary, repl, changelog population, author commit percentages and more项目地址https://gitcode.com/gh_mirrors/gi/git-extras点击查看免费下载本文以 Readme.md 为主线结合 Commands.md命令参考、Installation.md安装指南以及仓库源码系统讲解 git-extras 的定位、安装方式、核心命令用法与默认分支变更机制。读完本文你将能够完成 git-extras 的安装部署、掌握仓库摘要、分支管理、变更日志生成、交互式 REPL 等高频命令的实战用法并能正确配置git-extras.default-branch以适配团队的分支命名约定。项目概览Git 的小配件工具箱git-extras 是一个以Little git extras为定位的 Git 增强工具集它为原生 Git 补充了仓库摘要、交互式 REPL、变更日志生成、作者提交占比统计等一批实用子命令。每一个工具都以独立的git-command可执行脚本形式存在于 bin/ 目录安装后即可像原生 Git 命令一样以git command的方式调用。从仓库结构可以清晰看到它的组织方式bin/全部git-*可执行脚本是命令的实际实现如 bin/git-summary、bin/git-changelogman/每一条命令的手册页git-*.1、git-*.md、git-*.html三种格式etc/bash/zsh/fish 三种 shell 的补全脚本helper/安装时被拼接到命令脚本中的公共辅助函数如默认分支探测逻辑tests/基于 bats 的测试用例用于验证命令行为Makefile负责构建、安装、卸载与文档生成。几条重要事实当前仓库内 bin/git-extras 标注的版本为7.6.0-dev即开发版安装后可通过git extras --version查看版本所有命令均依赖 bash 脚本环境安装要求bash 4.0 与 Git 2.17详见下文依赖清单。安装部署从包管理器到源码构建git-extras 提供多种安装途径官方维护的渠道为 Homebrew其余渠道由各发行版打包者维护。以下内容完整整理自 Installation.md。依赖清单安装前请确认以下依赖是否满足部分命令有额外依赖依赖说明bash 4.0基础运行环境bash --version版本过低需先升级macOS 默认 bash 通常过旧可用brew install bashGit 2.17基础运行环境column/awk/find/tput常规命令所需cURL仅git-fork、git-ignore-io、git-pull-request需要ps仅git-changelog需要rsync仅git-rscp、git-scp需要xargs仅git-delete-merged-branches、git-force-clone、git-sed、git-scp需要包管理器安装不同平台的安装命令如下Debian/Ubuntusudo apt-get install git-extrasDebian 亦可sudo $apt_pref update sudo $apt_pref install git-extrasFedorasudo dnf install git-extrasRHEL/CentOS需先启用 EPEL再sudo yum install git-extrasopenSUSE先添加仓库如 Leap 15.6sudo zypper ar https://download.opensuse.org/repositories/devel:/tools:/scm/15.6/devel:tools:scm.repo再sudo zypper in -y git-extrasNix/NixOSnix-env -i git-extrasHomebrewbrew install git-extrasArch LinuxAUR 中的git-extras与git-extras-gitFreeBSDpkg install git-extrasBSD通用按源码构建方式安装注意使用gmakeGNU make而非makeHomebrew 安装的局限通过 Homebrew 安装时无法在安装过程中跳过与已有 git alias 冲突的某个子命令如需这种选择性安装能力应改用源码构建。Windows 安装先安装 Git for Windows 2.x克隆 git-extras 仓库可git checkout到最新 tag以管理员身份若 Git 以管理员安装执行 install.cmd。默认会在 PATH 中查找 Gitwhere git.exe第一个命中项或默认安装位置%ProgramFiles%\Git回退路径为C:\SCM\PortableGit若 Git 装在其他位置需显式传入路径例如install.cmd C:\git使用git summary与git ignore-io还需将 msys2 安装目录usr/bin下的column.exe复制到 Git 安装目录的usr/bin。源码构建推荐可自定义 PREFIX$ git clone https://github.com/tj/git-extras.git $ cd git-extras # 检出最新 tag可选 $ git checkout $(git describe --tags $(git rev-list --tags --max-count1)) $ [sudo] make install默认安装到/usr/local可通过PREFIX指定安装位置# 非 root 用户安装到主目录 make install PREFIX$HOME/.local # 第三方软件目录 make install PREFIX/opt如需将主体安装到指定前缀、但配置文件仍写入系统/etc可同时指定SYSCONFDIR$ sudo make install PREFIX/usr/local SYSCONFDIR/etc从 Makefile 源码看make install会先运行check_dependencies.sh做依赖检查随后将 helper/reset-env、helper/git-extra-utility 等公共库与各命令脚本拼装后安装到$(PREFIX)/bin同时安装 man 手册页man/git-*.1与补全脚本。若某命令与已有 git alias 冲突安装过程会交互询问是否仍安装可用SKIP_CONFLICT_CHECKyes跳过询问。安装后 Makefile 还会提示 zsh 用户source etc/git-extras-completion.zsh、fish 用户将 etc/git-extras.fish 链接到~/.config/fish/completions/。网络一键安装curl -sSL https://raw.githubusercontent.com/tj/git-extras/main/install.sh | sudo bash /dev/stdin该脚本见 install.sh会临时克隆仓库、检出最新 tag 并执行make install未传PREFIX时使用sudo make install。作为 Zsh 插件安装ZInitzinit ice asprogram pick$ZPFX/bin/git-* srcetc/git-extras-completion.zsh makePREFIX$ZPFX zinit light tj/git-extras此方式安装到$HOME$ZPFX默认为~/.zinit/polaris无需管理员权限更新用zinit update tj/git-extras。更新包管理器安装使用对应包管理器更新源码安装运行git extras update。注意这会以最新发布版重新安装可能丢失你当初指定的自定义安装选项。从 bin/git-extras 源码可见update 逻辑会定位现有git-extras可执行文件位置、推算出 PREFIX再通过install.sh以该 PREFIX 重装Windows/Cygwin/MSYS 环境则走install.cmd路径。命令体系从入门到精通的分类速查Commands.md 记录了 80 条命令的完整用法本文按使用场景归类精选高频命令深入讲解。主命令 git extras$ git extras --version # 输出版本 $ git extras --help # 列出全部可用命令 $ git extras update # 更新到最新版仓库统计与贡献分析git summary—— 输出仓库或路径摘要作者提交占比按人数与百分比排序$ git summary project : git-extras repo age : 10 months ago branch : master last active : 3 weeks ago active on : 93 days commits : 163 files : 93 uncommitted : 3 authors : 97 Tj Holowaychuk 59.5% 37 Jonhnny Weslley 22.7% ...支持变体与选项接一个 committish 范围git summary v42..只统计该区间内的提交--line按代码行数统计作者占比输出示例见 Commands.md也可加路径过滤如git summary --line src/--output-style tabular/--output-style oneline以表格/单行形式输出仓库整体信息$ git summary --output-style tabular # Repo | Age | Last active | Active on | Commits | Uncommitted | Branch git-extras | 13 years | 7 hours ago | 807 days | 1703 | 3 | master $ git summary --output-style oneline git-extras / age: 13 years / last active: 7 hours ago / active on 807 days / commits: 1703 / uncommitted: 3 / branch: mastergit effort—— 展示每个文件的提交活跃度active days 为对该文件有过修改的总天数便于定位最活跃的代码区域$ git effort --above 5 # 只看提交数 5 的文件 $ git effort -- --sincelast month # 只看近一个月语法同 git log --since $ git effort bin/* lib/* # 默认用 git ls-files也可显式传文件/目录git contrib author—— 输出某位作者对项目的全部提交清单git guilt rev1 rev2—— 计算两个版本之间的 blame 变化量git count [--all]—— 输出提交总数或按作者的详细提交数git commits-since [date]—— 列出某个日期默认 last week以来的提交git authors—— 按提交数生成 AUTHORS 文件--list仅列出、--list --no-email去掉邮箱支持git-shortlog的 MAPPING AUTHORS 机制合并同一作者的提交git standup -a author -d days—— 回顾某人最近 N 天的提交。分支管理git feature name [-r remote]—— 创建/合并 feature 分支的完整工作流$ git feature dependencies # 创建并切换到 feature 分支 $ git feature dependencies -r upstream # 同时建立远程跟踪分支-r 未指定时推送到 origin $ git checkout master git feature dependencies # 再次执行则检出该分支 $ git checkout master git feature finish dependencies # 合并进当前分支并删除已跟踪的远程分支同类命令还包括git create-branch name [-r remote]创建分支并可选建立远程跟踪、git delete-branch name删除本地与远程分支、git fresh-branch name创建空分支、git rename-branch old new重命名并同步远程、git brv [--reverse]按最后提交日期排序的分支列表反向排序可设为默认git config git-extras.brv.reverse true、git delete-merged-branches删除git branch --merged列出的分支、git delete-squashed-branches [main]删除被 squash 合并进指定分支的分支、git delete-gone-branches [--dry-run]删除远程跟踪已消失的[gone]分支--dry-run预览、git show-merged-branches/git show-unmerged-branches列出已/未合并进当前 HEAD 的分支、git merge-into [src] dest把 src 合入 dest 后留在当前分支、git graft src dest把 src 分支的提交并入 dest 分支、git squash src|ref [msg]将分支或提交范围压缩为单个提交如git squash HEAD~3 Work on a feature、git sync [remote] [branch]同步本地分支与其远程分支。变更日志生成git changelog—— 基于 git tag 与提交信息生成 Changelog。它会自动识别文件名以Change或History开头不区分大小写的既有 changelog 文件并追加内容无 tag 时输出全部提交有 tag 时输出到最近一次 tag 为止。完整参数如下-a, --all Retrieve all commits (ignores --start-tag, --final-tag) -l, --list Display commits as a list, with no titles -t, --tag Tag label to use for most-recent (untagged) commits -f, --final-tag Newest tag to retrieve commits from in a range -s, --start-tag Oldest tag to retrieve commits from in a range -n, --no-merges Suppress commits from merged branches -p, --prune-old Replace existing Changelog entirely with new content -x, --stdout Write output to stdout instead of to a Changelog file -h, --help, ? Usage help典型用法$ git changelog --tag 1.5.2 cat History.md # 以上次 tag 为界生成用 1.5.2 作标题 $ git changelog --list # 列出最近 tag 以来的提交 $ git changelog --list --all # 从仓库诞生至今的全部提交注意默认会拼接检测到的旧 changelog 内容用-p可禁用此行为生成的 changelog 在设置了$EDITOR时会自动打开。交互式 REPLgit repl—— Git 的 read-eval-print-loop进入后无需再敲git前缀可用!command执行普通 shell 命令输入exit、quit、q、^D或^C退出启动时传入的参数会被当作第一个要执行的命令。配置项来自 Commands.md 的 CONFIGURATION 一节# 每个项目独立的命令历史文件去掉 --global 则仅对当前项目生效 git config --global git-extras.repl.use-local-history true # 回车时默认执行的命令 git config --global git-extras.repl.on-enter-command git status -sb # 提示符末尾字符默认 git config --global git-extras.repl.prompt-character ± # 提示符前缀默认 git可置空 git config --global git-extras.repl.prefix # 提示符中显示当前仓库名默认 false git config --global git-extras.repl.show-project-name true会话示例$ git repl git version 2.34.1 git-extras version 7.3.0 Type ls to ls files below current directory; !command to execute any command or just subcommand to execute any git subcommand; quit, exit, q, ^D, or ^C to exit the git repl. git (master) ls-files History.md Makefile Readme.md bin/git-changelog ... git (master) !echo Straight from the shell! Straight from the shell! git (master) quit忽略规则与仓库信息git ignore pattern...—— 免手动编辑.gitignore$ git ignore build *.o *.log ... added build ... added *.o ... added *.log无参数时同时展示全局与本地忽略文件-g/--global、-l/--local、-p/--private分别只看全局、本地、仓库内忽略文件。git ignore-io type—— 从 GitHub 官方 gitignore 模板生成样例本地缓存于~/.gi_list$ git ignore-io vim # 屏幕展示模板 $ git ignore-io vim python # 多类型 $ git ignore-io -a vim # 追加到 .gitignore $ git ignore-io -r vim # 覆盖 .gitignore $ git ignore-io -l # 列出全部可用类型-L 换一种格式 $ git ignore-io -s ja # 搜索类型如 django/java/ninjagit info [--no-config]—— 汇总远程 URL、远程/本地分支、子模块为已暂存、-为已删除、最近提交与.git/config配置--no-config可省略配置段。提交与历史改写git coauthor user email—— 为最近一次提交追加Co-authored-by:见 Commands.md 中的git log -1输出示例git reauthor—— 重写历史以修正作者身份核心参数为--old-email、--correct-email、--correct-name、--use-config用当前 git 配置中的身份、--type author|committer、--all全仓库。例如git reauthor --old-email jackperso.me --correct-email jackwork.com --correct-name Jack Foobargit stamp Type ID—— 给最近提交追加 issue/review 引用如git stamp Issue FOO-123、git stamp Review url--replace可整体替换git undo [n]—— 移除最近 n 个提交默认 1 个git wip/git unwip—— 将工作区全部改动含新增、删除打成一个 WIP 提交 / 撤销 WIP 提交并把改动放回工作区git obliterate file—— 从仓库含历史与 tag彻底移除文件如git obliterate secrets.jsongit magic—— 用自动生成的信息提交改动。协作与远程git fork repo—— 先 fork 再 clonefork 仓库、clone 到当前目录、将原仓库添加为upstream远程远程 ref 在配置了 ssh 时用 git over ssh否则 https见 Commands.md 的git remote -v输出示例git pull-request—— 命令行创建 pull requestgit pr id|url [remote]—— 检出 GitHub 的 PR 到本地pr/id分支git pr clean清理全部 PR 分支git mr id|url [remote]—— 从 GitLab或 Forgejo/Codeberg检出 merge request 到mr/id分支同样支持clean参数git browse [remote]/git browse-ci [remote]—— 在默认浏览器打开仓库主页 / CI 页面GitHub Actions、GitLab CI、Bitbucket Pipelines 等git scp [options] remote [commits...]—— 基于rsync而非 scp把工作树文件同步到远程仓库工作目录选项-v/--verbose、-i/--interactive逐个确认、-n/--dry-run必须置于 remote 之前git-rscp是其反向操作。例如git scp staging未暂存文件、git scp staging HEAD~1最近一次提交以来的改动、git scp staging js/vendor/指定目录git force-clone [-b branch] url dir—— 目标目录已是仓库时强制重置为远程克隆内容。注意这会销毁目标仓库的所有本地改动重置文件、删除本地分支详见 man/git-force-clone.mdgit remote相关git rename-remote old new无视名字冲突重命名远程并列出当前远程、git rename-tag old new本地与远程同时重命名 tag示例见 Commands.mdgit mr相关链接git get url按配置路径克隆如git config --global --add git-extras.get.clone-path $HOME/some-dir后git get https://github.com/hyperupcall/bakegit gh-pages—— 建立gh-pages分支。文件与内容操作git cp src dst—— 带历史地复制文件保留历史且可处理合并冲突git rename-file old new—— 重命名文件/目录且确保 Git 识别对大小写不敏感文件系统上的纯大小写改名尤为关键等价于组合mv与git mvgit delete-submodule name—— 删除子模块如git delete-submodule lib/foogit delete-tag tag—— 删除本地与远程 taggit sed this that [g] [-- path...]—— 按 grep 语义定位并批量替换文件内容git touch file——touch并加入暂存区一步创建新文件git reset-file file [commit]—— 将单个文件重置到 HEAD 或指定提交git delta [branch]—— 列出与另一分支不同的文件git archive-file—— 按当前 HEAD 命名生成仓库 zip 归档git utimes [--newer]—— 把文件修改时间改为其最后一次提交时间--newer只修正比提交时间新的文件不动工作树/暂存区中的文件git root—— 输出仓库根目录路径可用cd git root快速跳转git clear/git clear-soft—— 硬重置并删除全部未跟踪文件前者包含.gitignore中的文件后者保留git setup [dir]—— 初始化仓库如不存在、git add全部文件并完成首次提交dir 默认为当前目录git lock/git locked/git unlock—— 锁定/列出/解锁本地文件防止意外修改如git lock config/database.yml。合并、变基与历史修复git merge-repo repo branch dir—— 合并两个仓库历史如git merge-repo other-repo.git master new_dir传master .则合入当前目录且不保留被合并仓库的路径前缀git psykorebase [--continue] dest [src]—— 借助一次 merge commit 完成变基、只需处理一次冲突git psykorebase master、冲突处理后git psykorebase --continuegit rebase-patch patch—— 补丁无法直接应用时自动寻找其适用的历史提交并基于它重放补丁示例见 Commands.mdgit abort/git continue—— 无需回忆具体命令直接中止 / 继续当前的 revert、rebase、merge 或 cherry-pickgit missing [branch] [-- path]—— 输出只在一侧分支存在的提交可用路径过滤git local-commits—— 列出本地分支上尚未推送 origin 的提交其余参数透传给git loggit show-tree—— 以装饰图形式展示所有分支的单行提交摘要合并图示例见 Commands.mdgit paste—— 通过 pastebinit 把提交补丁发送到 pastebin默认发送当前分支相对其上游分支的提交参数透传给git format-patch --stdout。发布git release tag [options]—— 带 tag 的发布提交支持 semver 快捷方式git release --semver major/minor/patch详见git help release。执行流程若存在.git/hooks/pre-release.sh以 tag 及剩余参数调用它以 Release 为信息提交改动如 changelog 等打 tagpush 分支与 tags若存在.git/hooks/post-release.sh以 tag 及剩余参数调用它。默认分支变更从 master 到 mainv6.4 起这是 Readme.md 中独具特色的关键变更说明自 Git Extras 6.4 起假设的默认分支名从master变更为main。该默认值会影响以下命令git archive-filegit delete-merged-branchesgit deltagit pull-requestgit show-merged-branchesgit show-unmerged-branchesgit squash如何改回 master若要恢复master作为默认分支名可配置git-extras.default-branch或init.defaultBranch前者优先级更高$ git config git-extras.default-branch master不配置任何项时的最终回退值为main。源码级实现印证该优先级规则在仓库公共辅助函数中得到了完整实现。helper/git-extra-utility 中的git_extra_default_branch()函数逻辑为git_extra_default_branch() { local extras_default_branch init_default_branch extras_default_branch$(git config --get git-extras.default-branch) init_default_branch$(git config --get init.defaultBranch) if [ -n $extras_default_branch ]; then echo $extras_default_branch elif [ -n $init_default_branch ]; then echo $init_default_branch else echo main fi }即探测顺序为git-extras.default-branch→init.defaultBranch→ 硬编码回退值main。该函数在安装时被拼接到所有受影响的命令脚本中见 Makefile 中对LIB helper/reset-env helper/git-extra-utility的拼接逻辑因此 README 中列出的七条命令全部共享这一探测行为。仓库内其余涉及默认分支的源码也印证了这一影响面bin/git-archive-file、bin/git-delete-merged-branches、bin/git-delta、bin/git-pull-request、bin/git-show-merged-branches、bin/git-show-unmerged-branches、bin/git-squash 均引用了默认分支探测逻辑tests/git-archive-file.bats 中还包含无默认分支配置与配置git config git-extras.default-branch main两种场景的测试用例可作为该行为的验证依据。迁移建议新建仓库若沿用master命名建议显式执行git config git-extras.default-branch master全局或仓库级避免生成归档、统计合并分支、squash 等操作误用main若团队使用git init时设置了init.defaultBranchGit 2.28 支持git-extras 会自动遵循该值无需额外配置由于git-extras.default-branch优先级最高它适合作为团队级覆盖手段统一对齐各成员环境。参与贡献欢迎参与贡献提交 PR 前请先阅读 CONTRIBUTING.md。仓库的测试体系基于 bats见 tests/如 tests/git-abort.bats、tests/git-changelog.bats、tests/git-scp.bats运行make test即可执行全部测试make docs会基于 man/ 下的 Markdown 手册用 ronn 生成 man 页与 HTML 文档。总结git-extras 以极低的接入成本每个命令即一个 bash 脚本为 Git 用户提供了大量日常高频能力git summary/git effort让仓库健康度一目了然git changelog/git release打通发布流程git repl提升交互效率git bulk支持多仓库批量操作git pr/git mr简化协作流程。安装方式覆盖主流包管理器、源码构建与一键脚本而默认分支从master到main的迁移机制则通过git-extras.default-branch→init.defaultBranch→main的三级回退在保证向后兼容的同时平滑适配了新仓库的主流命名习惯。建议按本文的安装指南完成部署后通读 Commands.md 并结合man git-command逐条实践。赞分享开发工具CLI版本控制【免费下载链接】git-extrasGIT utilities -- repo summary, repl, changelog population, author commit percentages and more项目地址https://gitcode.com/gh_mirrors/gi/git-extras点击查看免费下载相关推荐Podman 日志彩色输出--color 选项用法与源码级配色原理Podman 日志彩色输出 color 选项用法与源码级配色原理 导读 当一条命令同时查看多个容器或一个 Pod 内多个容器的日志时输出行混杂在一起难以开发工具CLI版本控制Git-Extras超级Git工具集全面解析与安装指南Git Extras超级Git工具集全面解析与安装指南 Git Extras是一个功能强大的Git工具集为开发者提供了超过100个实用的Git扩展命令极大开发工具CLI版本控制Oh My Zsh git-extras 插件为 git-extras 命令补齐 Zsh 智能补全的完整指南Oh My Zsh git extras 插件为 git extras 命令补齐 Zsh 智能补全的完整指南 导读 git extras 是一套为 Git 提CLI开发工具插件系统上一篇3分钟完成B站缓存视频转换m4s转MP4完整解决方案下一篇5分钟掌握B站缓存视频转换m4s-converter完整使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →