Git 高级工具:Stash, Bisect, Worktree, Aliases, Attributes
除了历史管理,Git 还提供了一系列高级工具来优化工作流程、诊断问题和自定义行为。储藏 (Stashing): 临时保存工作现场
当你正在处理某个任务,但需要紧急切换到另一个分支(例如修复 Bug),而当前的工作尚未完成,不适合提交时,git stash 可以将你工作目录和暂存区的未提交更改(已跟踪文件)暂时保存起来,让工作区恢复到 HEAD 提交时的干净状态。
核心场景:
- 紧急切换任务: 正在开发
feature-X,突然需要去main修复 Bug。 - 拉取更新遇阻:
git pull时提示本地有未提交的更改会与远程冲突。
- 储藏当前更改:
git stash或git stash save "描述信息" - 查看储藏列表:
git stash list(显示如stash@{0},stash@{1}) - 应用最近的储藏并从列表中移除:
git stash pop - 应用指定的储藏但保留在列表中:
git stash apply stash@{n} - 查看指定储藏的内容:
git stash show stash@{n} - 查看指定储藏的详细差异:
git stash show -p stash@{n} - 删除指定的储藏:
git stash drop stash@{n} - 删除所有储藏:
git stash clear - 储藏包括未跟踪的文件:
git stash -u或git stash --include-untracked - 储藏所有文件 (包括忽略文件):
git stash -a或git stash --all
二分查找 (git bisect): 快速定位引入 Bug 的提交
当发现一个 Bug,只知道它在某个旧版本是好的 (good),在新版本是坏的 (bad) 时,git bisect 可以通过二分查找的方式,自动或半自动地帮你快速定位到第一个引入该 Bug 的提交。
场景: 项目部署后出现问题,你知道一周前的版本 v1.0 正常,当前 HEAD 有问题,期间有上百个提交。
工作流程:
git bisect start# 开始二分查找git bisect bad HEAD# 标记当前版本有问题git bisect good v1.0# 标记一个已知无问题的版本- Git 会自动检出历史记录中间的一个提交。
- 测试当前检出的版本是否有问题。
- 告知 Git 测试结果:
git bisect good(如果这个版本没问题) 或git bisect bad(如果这个版本有问题)。 - Git 会根据你的反馈,继续检出剩余范围的中间提交,重复步骤 5-6。
- 最终,Git 会输出第一个被标记为
bad的提交,这就是引入问题的提交。 git bisect reset# 结束查找,回到原来的分支。
git bisect 可以极大地缩短调试回归 Bug 的时间。
工作树 (git worktree): 同时检出多个分支到不同目录
允许你在同一个仓库中,将不同的分支同时检出到不同的文件系统目录下,而无需克隆多次仓库或频繁 stash 和 switch。
场景: 你正在 feature-A 分支开发复杂功能,需要紧急修复 hotfix 分支的问题,但不想打断 feature-A 的环境(如编译产物、依赖)。
操作:
Git 别名 (Aliases): 提升命令效率
Git 别名允许你创建自定义的简写命令,用于替代长度复杂的 Git 命令,从而显著提高工作效率。 创建别名的两种方式:-
使用 Git 配置命令:
-
直接编辑 Git 配置文件 (
.gitconfig):
- 简化的分支切换:
git co main代替git checkout main - 一目了然的状态查看:
git st代替git status - 撤销暂存:
git unstage file.txt代替git reset HEAD file.txt - 查看漂亮的日志图表:
git lg代替复杂的 log 格式化命令
- 使用
!可以运行外部命令或创建包含多个命令的别名:
Git 属性 (Attributes): 自定义文件处理规则
Git 属性允许你为特定文件或文件模式指定特殊处理规则,例如合并策略、差异比较方式、过滤器等。这些规则在.gitattributes 文件中定义。
常见使用场景:
-
行尾处理: 确保跨平台项目中的行尾统一
-
自定义差异显示:
-
合并策略指定:
-
标记导出归档时排除的文件:
word 差异工具