---
title: "git 扩展命令"
canonical_url: "https://wwlight.vercel.app/guides/notes/git-expand"
---
# git 扩展命令

## Git LFS 大文件存储

<div className="grid,gap-4,sm:grid-cols-2,[&>*]:my-0!">
<tip to="https://git-lfs.com/">

Git Large File storage

</tip>

<tip to="https://docs.github.com/zh/repositories/working-with-files/managing-large-files/about-large-files-on-github">

GitHub 管理大型文件

</tip>
</div>

### Git LFS 原理

- `Git LFS` 通过懒惰地 (`lazily`) 下载大文件的相关版本来减少大文件在仓库中的影响。具体来说，大文件是在 `checkout` 的过程中下载的，而不是 `clone` 或 `fetch` 过程中下载的。
- `Git LFS` 通过将仓库中的大文件替换为小于 1 KB 的指针文件来做到这一点。在正常使用期间，我们不会看到这些指针文件，因为它们是由 `Git LFS` 自动处理的:

  - 当我们执行 `git add` 命令时, `Git LFS` 用一个指针替换实际内容,并将实际内容存储在本地 LFS 缓存中 (本地缓存位于仓库的 *.git/lfs/objects* 路径下）。
  - `git push` 时新增的 `commit` 所引用的所有 `大文件` 都会从本地传输到远程仓库的远程存储。
  - 当我们 `checkout` 一个包含 `Git LFS` 指针的 commit 时 (`pull` 包含了 `checkout` 命令)，指针文件将替换为本地 `Git LFS` 缓存中的文件，或者从远端 `Git LFS` 存储区下载。

![git-lfs-graphic.gif](https://wwlight.vercel.app/documentation/git-lfs-graphic.gif)

### Git LFS 好处

- 对于日常使用 Git 的习惯不造成影响。
- 减小本地 Git 缓存所占用的存储空间。
- 加快 `git fetch` 或 `git pull` 的速度。
- 加快在 commit 之间切换的速度。

### Git LFS 使用方式

<tabs>
<tabs-item label="Windows">

```sh
scoop install git-lfs
```

</tabs-item>

<tabs-item label="MacOS">

```sh
brew install git-lfs
```

</tabs-item>
</tabs>

```sh
# 检查
$ git lfs --version

# 初始化工程，开启
$ git lfs install
$ git lfs install --local

# 将 .png 文件格式设置为被 Git LFS 管理的格式
# 或者直接编辑 .gitattributes
$ git lfs track "*.png"
# 添加所有需要追踪的文件类型（一次性添加多个扩展名）
$ git lfs track "**/*.{psd,ai,tiff,raw,sketch,mp4,mp3,zip,rar,sql,pdf}"

# 确认追踪规则
$ git lfs track

# 查看当前 commit 有哪些文件被认为是 LFS 文件
$ git lfs ls-files

# 剪除存放于本地的 LFS 文件中那些旧版本的版本, 释放一些硬盘存储空间
$ git lfs prune

# 关闭
$ git lfs uninstall --local
```

> 参考资料：[Git LFS 大文件存储](https://blog.yusong.me/git/lfs)

## git-extras 常用命令

> [git-extras](https://github.com/tj/git-extras/blob/main/Commands.md) 是一组有用的 Git 扩展命令，旨在简化常见的 Git 工作流程和任务。

<tabs>
<tabs-item label="方式 1">

```sh
# 工具版本与帮助
$ git extras --version    # 查看 git-extras 版本号（缩写：-v）
$ git extras --help       # 查看 git-extras 帮助文档（缩写：-h）

# 仓库基础与信息查询
$ git info                # 显示当前仓库详细信息（作者、提交数、分支、最后提交等）
$ git root                # 输出当前 Git 仓库的根目录绝对路径
$ git summary             # 输出当前仓库的摘要信息（提交总数、作者排名、活跃天数等）
$ git count               # 统计提交次数
$ git line-summary        # 按作者汇总代码行数的增加与减少量
$ git effort              # 统计每个文件的提交次数与活跃度（柱状图展示）
$ git churn               # 统计文件修改频率

# 快捷网页跳转
$ git browse              # 浏览器中打开当前项目的远程仓库页面
$ git browse-ci           # 浏览器中打开当前项目的 CI 页面

# 分支与合并增强
$ git bclean              # 删除已合并到当前分支的其他本地分支
$ git bulk                # 在多个 Git 仓库中批量执行指定命令
$ git delta               # 列出当前分支与指定分支之间有差异的文件列表
$ git merge-into          # 将 A 分支合并到 B 分支（无需切换到 B 分支）
$ git merge-repo          # 将外部 Git 仓库合并到当前仓库的指定目录并保留历史
$ git pull-request        # 创建 GitHub/GitLab 的 Pull Request

# 日志、历史与站会
$ git changelog           # 依据提交历史生成或更新 CHANGELOG.md
$ git commits-since       # 查看指定时间点以来的所有提交记录
$ git graft               # 合并指定分支到当前分支并删除原分支
$ git standup             # 展示指定作者最近的提交记录

# 提交控制与进度管理
$ git undo                # 撤销最后一次提交，保留修改至暂存区（同 git reset --soft HEAD~1）
$ git wip                 # 创建临时提交以保存当前未完成的工作进度
$ git unwip               # 撤销 wip 临时提交并恢复工作区
$ git bug                 # 创建 bug 修复分支，修复完成后自动合并并删除该分支

# 代码清理与安全删除
$ git clear               # 强制清理所有未追踪的文件和目录（比 git clean -fd 更彻底） # [注意] 无法恢复
$ git fresh               # 强制拉取远程最新代码并丢弃本地所有未提交修改 # [注意] 覆盖本地，慎用
$ git obliterate          # 从所有历史提交中彻底删除指定文件 # [注意] 涉及历史重写，需强推远程

# 文件锁定与防误触
$ git locked              # 列出被锁定的文件（assume-unchanged 标记）
$ git lock                # 锁定指定文件，使其不参与版本追踪与提交
$ git unlock              # 解锁指定文件

# 仓库初始化与发布
$ git setup               # 初始化本地 Git 仓库并交互式配置远程仓库
$ git release             # 自动执行发布流程：打 Tag、推送到远程、生成 Release
$ git ignore              # 将指定规则或文件追加至 .gitignore 文件
$ git alias               # 配置和查看 Git 别名
```

</tabs-item>

<tabs-item label="方式 2">

```sh
# 工具版本与帮助
$ git-extras --version    # 查看 git-extras 版本号（缩写：-v）
$ git-extras --help       # 查看 git-extras 帮助文档（缩写：-h）

# 仓库基础与信息查询
$ git-info                # 显示当前仓库详细信息（作者、提交数、分支、最后提交等）
$ git-root                # 输出当前 Git 仓库的根目录绝对路径
$ git-summary             # 输出当前仓库的摘要信息（提交总数、作者排名、活跃天数等）
$ git-count               # 统计提交次数
$ git-line-summary        # 按作者汇总代码行数的增加与减少量
$ git-effort              # 统计每个文件的提交次数与活跃度（柱状图展示）
$ git-churn               # 统计文件修改频率

# 快捷网页跳转
$ git-browse              # 浏览器中打开当前项目的远程仓库页面
$ git-browse-ci           # 浏览器中打开当前项目的 CI 页面

# 分支与合并增强
$ git-bclean              # 删除已合并到当前分支的其他本地分支
$ git-bulk                # 在多个 Git 仓库中批量执行指定命令
$ git-delta               # 列出当前分支与指定分支之间有差异的文件列表
$ git-merge-into          # 将 A 分支合并到 B 分支（无需切换到 B 分支）
$ git-merge-repo          # 将外部 Git 仓库合并到当前仓库的指定目录并保留历史
$ git-pull-request        # 创建 GitHub/GitLab 的 Pull Request

# 日志、历史与站会
$ git-changelog           # 依据提交历史生成或更新 CHANGELOG.md
$ git-commits-since       # 查看指定时间点以来的所有提交记录
$ git-graft               # 合并指定分支到当前分支并删除原分支
$ git-standup             # 展示指定作者最近的提交记录

# 提交控制与进度管理
$ git-undo                # 撤销最后一次提交，保留修改至暂存区（同 git reset --soft HEAD~1）
$ git-wip                 # 创建临时提交以保存当前未完成的工作进度
$ git-unwip               # 撤销 wip 临时提交并恢复工作区
$ git-bug                 # 创建 bug 修复分支，修复完成后自动合并并删除该分支

# 代码清理与安全删除
$ git-clear               # 强制清理所有未追踪的文件和目录（比 git clean -fd 更彻底） # [注意] 无法恢复
$ git-fresh               # 强制拉取远程最新代码并丢弃本地所有未提交修改 # [注意] 覆盖本地，慎用
$ git-obliterate          # 从所有历史提交中彻底删除指定文件 # [注意] 涉及历史重写，需强推远程

# 文件锁定与防误触
$ git-locked              # 列出被锁定的文件（assume-unchanged 标记）
$ git-lock                # 锁定指定文件，使其不参与版本追踪与提交
$ git-unlock              # 解锁指定文件

# 仓库初始化与发布
$ git-setup               # 初始化本地 Git 仓库并交互式配置远程仓库
$ git-release             # 自动执行发布流程：打 Tag、推送到远程、生成 Release
$ git-ignore              # 将指定规则或文件追加至 .gitignore 文件
$ git-alias               # 配置和查看 Git 别名
```

</tabs-item>
</tabs>


## Sitemap

See the full [sitemap](https://wwlight.vercel.app/sitemap.md) for all pages.
