10 年了,你还在用 2005 年的 Git 命令吗?

100 天前
 Need4more

观帖子 https://fast.ex.noerr.eu.org/t/1139495 有感

说实话,很多人(包括曾经的我)可能还停留在 Git 上古时期的用法上,就像它停留在 2005 年一样。但 git 这些年也在变化,在这里分享一些有用的 modern git 命令,帮你把 Git 用得更溜更省心,或许有些人还没用过。

git switch (2019 年, Git 2.23+)

干啥的? 专治切换分支!取代了部分 git checkout 的功能。

香在哪?

git switch other-branch: 干净利落地切换分支。

git switch -: 瞬间切回上一个分支,跟 cd - 一样方便。

git switch remote-branch: 直接切换到远程分支并自动跟踪。

关键优势:

比万能的 git checkout 更专注、更安全!它会进行额外的检查,比如如果切换会导致本地未提交的改动丢失,它会中止操作,避免误操作悲剧。再也不用担心 checkout 的迷惑行为了。

git restore (2019 年, Git 2.23+)

干啥的? 专门负责恢复文件状态!分担了 git checkout 和 git reset 的部分职责。

git restore --staged some-file.py: 把暂存区的文件撤回来(取消 add ),

等效 git reset HEAD some-file.py

git restore --staged --worktree some-file.py: 不仅取消暂存,还直接丢弃工作区的修改(⚠️慎重),

等效 git checkout -- some-file.py

git restore --source HEAD~2 some-file.py: 直接把文件恢复到前两次提交时的版本。

关键优势:

语义更清晰!命令名字 restore 就告诉你它在“恢复”东西。不再需要死记硬背 checkout 和 reset 在各种场景下的复杂参数组合,职责分离,不易出错。

git sparse-checkout (2020 年, Git 2.25+)

干啥的?

解救深陷超大 Monorepo 的开发者!只检出你需要的部分目录/文件。

克隆时跳过初始检出:git clone --no-checkout repo-url

初始化稀疏检出配置(锥形模式):git sparse-checkout init --cone (初始只检出根目录)

检出特定目录:git sparse-checkout set service/common

git checkout main 后,神奇的事情发生了:只有你设置的部分目录/文件出现在工作区!

关键优势:

本地开发:git status, checkout 等命令快如闪电!尤其适合微服务架构的庞大仓库。

CI/CD: 大幅提升流水线效率!只拉取构建部署所需的部分代码,省时省资源。简直救命神器。

git worktree (2018 年)

干啥的?

让你在同一个仓库的不同目录下,同时并行处理多个分支!

假设你在 dev 分支开发,突然要紧急修复 master 的线上 Bug 。 无需 stash 或提交半成品:

git worktree add -b hotfix ./hotfix master

瞬间在 ./hotfix 子目录得到一个干净的 hotfix 分支工作副本(基于 master )。 进去修改、测试、提交、推送一气呵成。 搞定后,回到原目录继续 dev 分支的开发。

查看所有工作树:git worktree list

关键优势: 完美解决多任务切换痛点!告别分支来回切换的麻烦和干扰,实现真正的并行开发。

  1. git bisect (虽不新,但强力安利!)

干啥的? 二分查找神器!帮你精准定位引入 Bug 的那个提交。

香在哪? git bisect start: 开始二分查找。

git bisect bad HEAD: 标记当前提交(或已知的坏提交)是坏的。

git bisect good v1.0: 标记一个已知的好提交(比如上一个稳定版本标签)。

Git 会自动切到一个中间提交,你需要测试这个提交是好是坏:

坏的输入 git bisect bad

好的输入 git bisect good

重复步骤 4 ,Git 会自动缩小范围,直到定位到第一个引入 Bug 的提交。

git bisect reset: 结束查找,回到起点。

关键优势: 面对茫茫提交历史,手动排查 Bug 来源无异于大海捞针。bisect 用算法帮你快速缩小范围,精准打击罪魁祸首,调试效率暴增。强烈建议每个开发者都掌握。

最后一点感想:

很多时候,我们在 StackOverflow 搜 Git 问题,看到的最高赞答案可能已经是 10 年前的了。虽然它可能依然有效,但很可能已经不是最优、最方便、最现代的做法了(比如还在大量教你用 checkout 切分支、恢复文件)。

6567 次点击
所在节点    程序员
39 条回复
profchaos
100 天前
第一条 git switch
THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.
minami
100 天前
还是习惯用图形化工具搞定
Need4more
100 天前
@profchaos 你的版本太老了?这个应该是固定的 feature 了
Need4more
100 天前
@minami 不知道你用的是哪个 gui 操作,至少在 vscode 环境下,很多操作无法通过 ui 完成。
这里的 git sparse-checkout 、git worktree 功能,idea 这样的 gui 我都没找到对应的
pingdog
100 天前
@Need4more https://git-scm.com/docs/git-switch
每个版本都带有这句话
THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.
liuzhw
100 天前
git 命令还是有必要的。当然大部分的操作都是在 idea 上完成的,但是有些特殊的操作还是命令比较好用,idea 找不到。
比如 :删除远程分支文件保留本地文件 这个需求

下面是我记录的比较常用的 git 命令:
https://blog.share888.top/note/efficiency/gitHub/05-Git%E5%91%BD%E4%BB%A4.html
lululau
100 天前
magit 不香吗,再不济还有 Neogit
sagaxu
100 天前
idea 的 git 我不会用,2025 了我还只会用命令行
darkhandz
100 天前
magit 全搞定,一行命令都不用输
Pete
100 天前
2005 年距今是 20 年
dvsilch
100 天前
https://github.com/GitAlias/gitalias
除了 diff 会用 IDE 以外,基本还是通过命令行 alias 完成 git 操作
minami
100 天前
@Need4more #4 TortoiseGit
james122333
99 天前
没什么用 事实上这些多的功能很多已经超出版控需要的了 很不符合精简哲学
这裏面我只有 restore 会用到 checkout 还是会检查改动 sparse-checkout/worktree/bisect 的目的都是配合外部工具就能实现的了
sparse-checkout 这是 submodule 用途
worktree 在大项目占空间也会搞混複杂化目录结构
bisect 也只是标记 外部弄脚本完全可以胜任
我是不知道现在 git 维护者是谁 但这肯定偏鸡肋 说用途还很少用 在非自己的机器上却还有一定的价值 不用曝露太多
zx900930
99 天前
neovim+lazygit ,基本不需要再打任何 git 命令,直接快捷键一把梭
msg7086
99 天前
@liuzhw #6 删除远程分支文件保留本地文件 这个应该是基本需求了,不知道为什么 IDEA 没加上。我用的 GUI 上就可以一步搞定。
msg7086
99 天前
顺便说一句,git 的 checkout 和 reset 算是最辣鸡的两个子命令了,不同的功能混杂在一起,根据对象是 ref 还是文件来执行完全不同的操作,也不知道怎么想的。新的 switch 和 restore 强太多了,可惜以前留下来的习惯完全改不掉了,抬手还是会去用 checkout 来 restore 文件。
cpf
99 天前
@profchaos 升级 git 版本就不会有这个提示了
kneo
99 天前
抄袭?说不定还是让 AI 抄的?搞技术的,会多少说多少,不会可以不发言,照着抄太没意思了。

https://martinheinz.dev/blog/109
balddonkey1
99 天前
巧了,这几个都有用,worktree 真的好用
fredweili
99 天前
IDE 工具,用的简单,暂时不需要成为 git 专家

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1139522

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX