让我们说实话——Git 既是福也是祸。一方面,它是现代软件开发的支柱;另一方面,它又是一系列复杂的命令,即使经验丰富的开发者也会挠头。当然,你肯定熟悉一些基础知识:git clone
,git commit
和 git push
是你的基本功。但是,你知道吗,其实大多数开发者几乎从未接触过的 Git 命令背后,有一个全新的世界?
这些隐藏的宝藏命令可以为你节省数小时,解决棘手问题,让你看起来像Git高手。准备好更上一层楼了吗?让我们深入了解10个被低估的Git命令,它们将彻底改变你使用版本控制的方式。
此处省略内容
1.git restore
:Git 的恢复功能
我们都遇到过这种情况——你正深陷在代码里,突然发现自己把文件搞砸了。可能是不小心把某个文件添加到了暂存区,或者做了不想保留的修改。这时,git restore
就能救场了。
# 取消文件的更改
git restore <文件名>
# 取消暂存文件(但保留修改)
git restore --staged <文件名>
全屏 全屏退出
实际案例:
我曾经不小心把一个不想包含的巨大的日志文件误加到暂存区。我没有惊慌,而是使用了 git restore --staged
把它从暂存区移除,同时保留了其他更改。有惊无险!
为什么它很棒: 它比旧的 git checkout
或 git reset
更简洁、更直观。可以把它看作是 Git 中的“Ctrl+Z”功能。
……
2.git switch
:更智能的分支切换方式
如果你曾经使用过 git checkout
来切换分支,你就会知道它有点像是瑞士军刀——它可以做很多事情。git switch
就来了。它专门用于分支操作,让你的工作流程更加顺畅直观。
# 切换到已有的分支
git switch <分支名>
# 创建并切换到新分支
git switch -c <新分支名>
全屏模式 退出全屏
为什么它很厉害: 它就像一个专门用于分支管理的工具,而不是那种多用途的工具,有时候会让你觉得它在跟你作对。
…
3.git sparse-checkout
: 更聪明,少辛苦
在巨大的单代码库中工作?克隆整个仓库感觉就像在下载整个互联网。使用git sparse-checkout
,你可以只检出你需要的目录或文件,帮你节省磁盘空间并加快工作流程。
在命令行中输入以下命令来初始化稀疏检出:
git sparse-checkout init --cone
运行以下命令来选择要检出的目录:
git sparse-checkout set <dir1> <dir2>
在这里替换 <dir1> 和 <dir2> 为实际目录名。
全屏, 退出
现实生活中的例子:
在之前的公司里,我们有一个包含超过10GB数据的单一代码库。通过使用git sparse-checkout
,我只需要克隆前端目录,从而将克隆时间从20分钟缩短到了不到1分钟内。
为什么它很酷: 它非常适用于大型项目来说,当你不需要整个仓库的所有内容时。就像选择特定文件而不是整个分支一样。
此处省略部分内容
4.git range-diff
:像行家一样比较提交区间
有没有尝试过比较两个版本的分支或补丁系列?这就像在草堆里找一根针一样困难。git range-diff
可以显示两个提交范围之间的差异,帮助你更容易审查复杂的变化。
比较两个提交范围之间的差异: git range-diff <commit-range-1> <commit-range-2>
例如:git range-diff v1.0...v2.0
注意:请根据实际需求替换 <commit-range-1>
和 <commit-range-2>
。
按全屏进入 点击切换全屏模式
为什么它这么牛: 它是代码审查和重新基线工作流的变革者。再也不用费劲盯着差异图,试图搞清楚哪里变了。
此处省略部分内容
5:git notes
:在不弄乱的情况下为提交添加元数据
有时候,单独的提交信息可能不足以表达所有内容。也许你需要添加内部注释、提醒或上下文信息,而不影响提交历史的整洁。这时,git notes
就派上用场了。它允许你在提交上添加注释,这些注释只会出现在 Git 日志中。
# 在提交上添加注释
git notes add -m "这里写你的注释" <提交的哈希值>
# 查看注释内容
git log --show-notes
全屏进入,全屏退出
实际例子:
在团队项目期间,我利用 git notes
添加了关于为何做出某些决定的备注。这帮助我们保持同步,而不会干扰提交历史记录。
为什么它很酷: 它就像你在提交上贴便签一样——既有用又不打扰,还很容易处理。
此处省略内容
6.git worktree
: 在多个分支上同时工作
在不同分支之间来回切换真让人头疼。要是能同时在多个分支上工作就好了。用 git worktree
,你可以为每个分支创建各自的目录,从而不用频繁切换分支。
# 创建一个新工作树,用于某个分支名
git worktree add ../<新目录名> <分支名>
# git worktree list
全屏 → 退出全屏
为什么它这么牛: 它就像是为你的代码提供了多个工作区。再也不用在分支之间换来换去,只需并行处理分支。
…… 此处省略部分内容 省略
7.git bisect
:像在破案一样找 bug
尝试确定一个bug是在何时引入的吗?可以使用git bisect
这个调试神器。git bisect
像时间机器一样,通过你的提交历史进行二分查找,帮助你找到确切引入问题的提交。
# 开始 bisect
git bisect start
# 标记此提交为坏的
git bisect bad
# 标记此提交为好的
git bisect good <提交哈希>
# 完成后再重置
git bisect reset
全屏 全屏退出
现实生活中的例子:
我曾经用 git bisect
来追踪一个导致我们应用崩溃的 bug。结果发现是一个三个月前引入的单行代码。如果没有 git bisect
,我可能需要花好几个小时手动检查每个提交。
为什么它超级棒: 它就像在你的团队中有个侦探,帮你像外科手术一样精准地找出bug。
8.
git replace
:重写历史而不影响现有内容
需要修改一个历史提交记录但不想通过重新整理(rebase)历史记录来修复吗?git replace
可以让你创建一个替代提交记录来替换原来的提交记录,同时保留原来的提交哈希值。
# 替换一个提交
git replace <旧的提交哈希> <新的提交哈希>
进入全屏 退出全屏
为什么它这么酷: 它是一种不会破坏历史记录的修正错误的非破坏性方法,可以把它看作是你提交中的隐蔽修改。
9:
git fsck
: 查找并修复仓库中的损坏问题
担心仓库的完整性有问题吗?git fsck
可以检查仓库中的错误,并帮助找回丢失的对象。
git fsck --full # 检查Git仓库的完整性
全屏 退出全屏
为什么它这么棒: 它是保护仓库不被损坏的第一道防线。可以把它看作 Git 的健康检查功能。
10.
git alias
: 创建自己的 Git 别名
厌烦了输入长长的命令吗?git 别名
让你可以创建常用的 Git 操作的快捷命令。
# 设置一个别名
git config --global alias.co checkout
# 使用这个别名
git co 分支名 命令
全屏 全屏退出
为什么它很赞: 自定义 Git 来完美匹配你的工作流程。就像为版本控制编写你自己的捷径一样。
更深入地掌握:掌握
git bisect
仔细看看 git bisect
,这是一个强大但经常被忽视的 Git 命令,让我们想象一下下面这个情况:
- 你的应用崩溃了,你搞不懂是为什么。
- 这个 bug 上个月还没有,但现在出现了。
- 你得在成百上千的提交记录里找找看。
而不是手动检查每个提交,git bisect
自动化了这个过程。它是如何工作的呢?
A) 开始进行二分会话步骤:
git bisect start # 开始进行Git二分查找,用于定位引入问题的提交。
进入全屏 退出全屏
B) 标记当前提交为“有问题的”:
git bisect 坏版本
进入全屏 / 退出全屏
标记一个已知的“好的”代码提交(比如,上个月的)。
git bisect good <commit-hash> (将此提交标记为正确的)
切换到全屏,退出全屏
D) Git 会自动检出中间的某个提交。测试你的应用,然后标记为“好(好)”或“坏(坏)”。
在使用 git bisect
时,你可以输入 git bisect good
(标记一个好版本),或者输入 git bisect bad
(标记一个坏版本)。
全屏,退出
E) 重复这个过程,直到 Git 找到引入该 bug 的具体提交。
小技巧: 你可以通过编写脚本来测试每个提交,从而自动化这个过程。例如
git bisect run ./test-script.sh # 自动运行此脚本以在 bisect 会话期间查找坏的提交。
全屏 退出全屏
最后的想法
Git 不仅仅只是 commit
, push
, 和 pull
。这些隐藏的功能可以节省你的时间,解决复杂的问题,让你成为更高效的开发者。无论是 git bisect
进行调试,git worktree
管理多个分支,还是 git replace
清理历史记录,这些命令就是你的秘密武器。
所以,下次当你在 Git 中迷路时,请记住:可能有一个命令可以解决你的问题。祝你编码愉快,希望你的合并永远没有冲突!🚀
关于ArpitStack(这里可以简要介绍下)
我对创建开源创新解决方案充满热情,这些解决方案旨在简化和增强开发者的开发流程。在我的个人作品集ArpitStack.com 中,展示了我的工作,包括像SecretStack、CloudStack这样的项目。
随时探索我的GitHub 仓库,在这些仓库里找到创新的解决方案。如果你觉得我的工作有价值,可以通过支持我成为GitHub 赞助者或通过请我喝咖啡来支持我。非常感谢你对我的支持 ❤️!
共同学习,写下你的评论
评论加载中...
作者其他优质文章