为了账号安全,请及时绑定邮箱和手机立即绑定

每周能省下5小时的10个Git冷门命令技巧

让我们说实话——Git 既是福也是祸。一方面,它是现代软件开发的支柱;另一方面,它又是一系列复杂的命令,即使经验丰富的开发者也会挠头。当然,你肯定熟悉一些基础知识:git clonegit commitgit push 是你的基本功。但是,你知道吗,其实大多数开发者几乎从未接触过的 Git 命令背后,有一个全新的世界?

这些隐藏的宝藏命令可以为你节省数小时,解决棘手问题,让你看起来像Git高手。准备好更上一层楼了吗?让我们深入了解10个被低估的Git命令,它们将彻底改变你使用版本控制的方式。

此处省略内容

1. git restore:Git 的恢复功能

我们都遇到过这种情况——你正深陷在代码里,突然发现自己把文件搞砸了。可能是不小心把某个文件添加到了暂存区,或者做了不想保留的修改。这时,git restore 就能救场了。

    # 取消文件的更改  
    git restore <文件名>  

    # 取消暂存文件(但保留修改)  
    git restore --staged <文件名>  

全屏 全屏退出

实际案例:

我曾经不小心把一个不想包含的巨大的日志文件误加到暂存区。我没有惊慌,而是使用了 git restore --staged 把它从暂存区移除,同时保留了其他更改。有惊无险!

为什么它很棒: 它比旧的 git checkoutgit 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 中,展示了我的工作,包括像SecretStackCloudStack这样的项目。

随时探索我的GitHub 仓库,在这些仓库里找到创新的解决方案。如果你觉得我的工作有价值,可以通过支持我成为GitHub 赞助者或通过请我喝咖啡来支持我。非常感谢你对我的支持 ❤️!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消