引言
作为一名开发者,你一定遇到过使用 Git 的种种烦恼:随着项目体积变大,操作变得越来越慢;切换分支时不小心覆盖了修改;面对庞大的 monorepo 项目难以下手。
幸好,Git 也在不断升级与进化,带来新功能,让我们的开发体验更加顺畅。本文为你总结了 10个实用但容易被忽略的 Git 命令,帮你更高效地管理代码和项目!
Git 的基础操作请参考:程序员必备!15个超实用的Git命令,助你高效管理代码
内容
1. git switch – 更安全的分支切换
在 Git 2.23 之前,git checkout
是切换分支的万能命令,但它还涉及其他操作,容易误触。
git switch
专注于分支切换,操作更安全、更清晰:
# 切换到其他分支
git switch feature-branch
# 创建并切换到新分支
git switch -c new-branch
好处: 减少误操作的风险,不再担心覆盖当前文件!
2. git restore – 安全地撤销文件更改
以往撤销更改,通常用 git checkout
或 git reset
,但容易混乱甚至影响分支状态。git restore
专注于文件恢复,操作简单直观:
# 丢弃工作区的更改
git restore main.js
# 撤销暂存区的更改
git restore --staged main.js
好处: 安全撤销文件修改,不影响分支或提交状态。
3. git maintenance – 自动优化仓库健康
当项目变大,执行 git status、git log
等操作会变慢。Git 2.29 引入 git maintenance
,自动维护仓库健康:
# 开启自动维护
git maintenance start
# 立即清理和优化
git maintenance run
优化内容:
• 垃圾回收:清理无用对象(如删除分支时残留的提交)。
• 重新打包:合并分散的包文件,提高存储效率。
• 提交图更新:加速 git log
和 git blame
等操作。
4. git sparse-checkout – 高效管理大仓库
在大规模 monorepo 中,克隆整个仓库很费时,但你可能只需要某几个目录。Git 2.25 推出了 git sparse-checkout
:
# 启用稀疏检出模式
git sparse-checkout init
# 仅拉取特定目录
git sparse-checkout set services/ docs/
好处: 拉取所需的目录,节省时间和磁盘空间。
5. git log –remerge-diff – 轻松理解合并提交
合并提交通常只显示哪些分支合并了,但无法直观看到具体改动。Git 2.35 引入了 --remerge-diff
参数:
git log --remerge-diff
用途: 回放合并策略,清晰展示合并带来的改动,方便调试和审查复杂的合并历史。
6. git blame –ignore-rev – 忽略格式化提交
团队进行批量格式化时,git blame
可能失去意义,因为每一行都指向格式化的提交。
# 忽略指定提交
git blame --ignore-rev <commit-hash>
还可以设置一个文件保存所有需要忽略的提交:
# 添加到忽略文件
echo <commit-hash> >> .git-blame-ignore-revs
# 配置 Git 使用该文件
git config blame.ignoreRevsFile .git-blame-ignore-revs
好处: 保留真正的代码作者信息。
7. git range-diff – 比较提交历史变化
当你进行 rebase 或修改历史后,如何查看新旧提交的具体差异?git range-diff
让你一目了然:
git range-diff
用途: 清楚了解历史如何演变,特别适合特性分支的开发和修复。
8. git worktree – 同时处理多个分支
频繁切换分支会中断工作流。git worktree
让你在同一仓库中创建多个工作目录:
# 为特定分支创建一个新目录
git worktree add ../feature-branch feature-branch
# 删除工作目录
git worktree remove ../feature-branch
好处: 同时在多个分支上工作,互不影响,效率倍增!
9. git rebase –update-refs – 自动更新引用
Rebase 后,旧提交会被替换,但分支引用可能未更新。Git 2.38 的 --update-refs
参数解决了这个问题:
git rebase --update-refs
用途: 自动同步相关分支和标签,避免手动更新的麻烦。
10. git commit –fixup 和 git rebase –autosquash – 轻松修复提交
发现某个提交需要修复?不用手动编辑历史!使用 git commit --fixup
和 git rebase --autosquash
:
# 针对特定提交创建修复提交
git commit --fixup=<commit-hash>
# 在交互式 rebase 中自动合并修复提交
git rebase -i --autosquash <base-branch>
好处: 自动整理提交历史,让代码更加干净整洁!
总结
这些 Git 命令可以大大提升你的开发效率,让你在处理大型项目、分支管理、历史回溯时更加得心应手。建议从当前工作流中最需要的命令开始尝试,你会惊讶于效率的提升!
快试试这些宝藏命令,让你的 Git 技巧更上一层楼!💡