10 个秘密 Git 命令,每周帮你节省 5 个小时以上
说实话,Git 就像一把双刃剑。一方面,它是现代软件开发的支柱。另一方面,它又像一座迷宫,即使是经验丰富的开发人员也会感到头疼。当然,你了解一些基本命令:git clone
、git commit
、 和 ,git push
这些都是你的日常工作。但如果我告诉你,Git 中还有一大堆大多数开发人员从未接触过的命令呢?
这些隐藏的宝藏可以帮你节省时间,解决棘手的问题,让你看起来像个 Git 大师。准备好升级了吗?让我们深入研究10 个被低估的 Git 命令,它们将彻底改变你的版本控制工作方式。
1.:Gitgit restore
的撤销按钮
我们都经历过这种情况——你正埋头苦写代码,突然意识到某个文件搞乱了。也许是你不小心暂存了某些内容,或者做了一些不想保留的更改。这时,它就能帮你git restore
解救这一切。
# Discard changes in a file
git restore <file-name>
# Unstage a file (but keep the changes)
git restore --staged <file-name>
真实世界的例子:
有一次,我意外地暂存了一个我本不打算包含的大型日志文件。我没有慌乱,而是git restore --staged
取消暂存了它,而没有丢失其他更改。危机终于避免了!
优点:它比旧版的git checkout
或更简洁、更直观,git reset
适合处理这些任务。可以把它想象成 Git 版的 Ctrl+Z。
2. git switch
:更智能的分支切换方式
如果您曾经使用过git checkout
分支切换工具,您就会知道它就像一把瑞士军刀——功能太多了。这就是它的git switch
用武之地。它专为分支操作而设计,让您的工作流程更顺畅、更直观。
# Switch to an existing branch
git switch <branch-name>
# Create and switch to a new branch
git switch -c <new-branch-name>
为什么它很棒:它就像拥有一个专门用于分支管理的工具,而不是一个有时感觉对你不利的多用途工具。
3.git sparse-checkout
更聪明地工作,而不是更努力地工作
在大型的 monorepo 中工作?克隆整个仓库感觉就像下载互联网一样。使用git sparse-checkout
,您可以只检出所需的文件或目录,从而节省磁盘空间并加快工作流程。
# Enable sparse checkout
git sparse-checkout init --cone
# Add specific directories
git sparse-checkout set <dir1> <dir2>
真实世界的例子:
在我上一份工作中,我们有一个包含超过 10GB 数据的 monorepo。使用git sparse-checkout
,我能够只处理前端目录,从而将克隆时间从 20 分钟缩短到 1 分钟以内。
优点:它非常适合不需要整个代码库的大型项目。你可以把它想象成挑选文件,而不是分支。
4 git range-diff
.:像专业人士一样比较提交范围
您是否曾尝试比较某个分支或补丁系列的两个版本?这就像大海捞针。它可以git range-diff
显示不同提交范围之间的差异,让您更轻松地审查复杂的更改。
git range-diff <commit-range-1> <commit-range-2>
优点:它彻底改变了代码审查和 rebase 工作流程。再也不用费力地查看代码差异来找出变化了。
5 git notes
.:将元数据附加到提交中,避免混乱
有时,提交消息并不够。您可能需要添加内部注释、提醒或上下文,同时又不使提交历史记录杂乱无章。这时,Gitgit notes
就派上用场了。它允许您为提交附加注释,这些注释仅在 Git 日志中可见。
# Add a note to a commit
git notes add -m "Your note here" <commit-hash>
# View notes
git log --show-notes
真实世界的例子:
在一个团队项目中,我经常git notes
添加一些提醒,来解释为什么做出某些决定。这有助于我们保持一致,而不会污染提交历史记录。
为什么它很棒:它就像在你的提交上留下便签一样 - 有用,不引人注目且易于管理。
6.:git worktree
同时在多个分支上工作
来回切换分支很麻烦。如果可以同时在多个分支上工作会怎么样?有了git worktree
,您可以为每个分支创建单独的目录,这样就不必不断地切换上下文了。
# Create a new worktree for a branch
git worktree add ../new-directory <branch-name>
# List all worktrees
git worktree list
优点:就像你的代码拥有多个工作区一样。无需再处理分支,只需并行工作流。
7.git bisect
像侦探一样寻找漏洞
想要精确定位 bug 的来源?git bisect
它就像你的调试时光机。它会对你的提交历史记录进行二分查找,找到导致问题的确切提交。
# Start bisect
git bisect start
# Mark a commit as bad
git bisect bad
# Mark a commit as good
git bisect good <commit-hash>
# Reset when done
git bisect reset
真实世界的例子:
我曾经git bisect
追踪过一个导致我们应用崩溃的 bug。结果发现它只是三个月前引入的一行代码。如果没有它git bisect
,我可能得花几个小时手动检查提交。
为什么它很棒:它就像您的团队中有一名侦探,可以帮助您以外科手术般的精确度追踪错误。
8. git replace
:在不破坏现状的情况下改写历史
是否需要在不重新定基的情况下修复历史提交?git replace
允许您创建覆盖原始提交的替换提交,而无需更改提交哈希。
# Create a replacement commit
git replace <old-commit-hash> <new-commit-hash>
优点:这是一种非破坏性的方式来修复历史记录中的错误。可以将其视为对提交的隐秘编辑。
9 git fsck
.:查找并修复存储库损坏
担心存储库的完整性?git fsck
检查存储库中的错误并帮助您恢复丢失的对象。
git fsck --full
优点:它是你抵御仓库损坏的第一道防线。可以把它想象成 Git 版的健康检查。
10 git alias
.:创建你自己的 Git 命令
厌倦了输入长命令?git alias
可以为您最喜欢的 Git 操作创建快捷方式。
# Add an alias
git config --global alias.co checkout
# Use the alias
git co <branch-name>
优点:自定义 Git,完美契合你的工作流程。就像创建你自己的版本控制秘籍一样。
深入探究:掌握git bisect
让我们仔细看看git bisect
,它是 Git 中最强大但未被充分利用的命令之一。想象一下这样的场景:
- 您的应用程序崩溃了,但您不知道原因。
- 上个月还没有这个漏洞,但现在却出现了。
- 您有数百条提交需要筛选。
无需手动检查每个提交,而是git bisect
自动执行该过程。其工作原理如下:
A)开始二分会话:
git bisect start
B)将当前提交标记为“坏”:
git bisect bad
C)标记已知的“良好”提交(例如,上个月的提交):
git bisect good <commit-hash>
D) Git 会自动检出中间的提交。测试你的应用并将其标记为“好”或“坏”:
git bisect good # or git bisect bad
E) 重复此操作,直到 Git 找到导致错误的确切提交。
专业提示:您可以通过编写脚本来测试每个提交,从而自动化此过程。例如:
git bisect run ./test-script.sh
最后的想法
Git 不仅仅是commit
、push
和pull
。这些隐藏的宝藏可以节省您的时间,解决复杂问题,并使您成为更高效的开发者。无论您是使用 进行调试git bisect
,使用 管理多个分支git worktree
,还是使用 清理历史记录git replace
,这些命令都是您的秘密武器。
所以,下次你再被 Git 的难题困住的时候,记住:肯定有对应的命令可以解决。祝你编码愉快,合并永远无冲突!🚀
关于 ArpitStack
我热衷于创建创新的开源解决方案,以简化和增强开发人员的工作流程。ArpitStack.com是我的个人作品集,我在这里展示我的作品,包括SecretStack、CloudStack等项目。
欢迎随意浏览我的GitHub Repos,寻找创新解决方案。如果您觉得我的工作很有价值,请考虑通过GitHub 赞助商或请我喝杯咖啡来支持我。非常感谢您的支持 ❤️!
文章来源:https://dev.to/arpitstack/10-secret-git-commands-that-will-save-you-5-hours-every-week-1mpn