ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【Git与Linux学习笔记 01】Git 常用指令速查:9 大分类 32 条核心命令与实战演示

【Git与Linux学习笔记 01】Git 常用指令速查:9 大分类 32 条核心命令与实战演示

本系列完整合集:

  • Git 与 Linux 学习笔记合集:命令速查、实战与面试考点完整合集

原分篇继续公开保留,可按需查阅。


这是《Git 与 Linux 学习笔记》系列的第 01 篇。缘起很简单:我每次要用到不那么高频的 Git 命令(stash、revert、tag……)都得现搜一遍,搜完就忘。这次干脆把散落的资料整理成自己的速查手册,按「我要干什么」来组织,每条命令都配一段可以直接复制运行的演示。

这一篇的核心一句话:Git 的所有日常操作,都是在「工作区、暂存区、本地仓库、远程仓库」这四个区之间搬东西——记住这句话,32 条命令就都不是孤立的。

〇、先建立地图:Git 的四个区

工作区 暂存区 本地仓库 远程仓库 (写代码的地方) → (git add 之后) → (git commit 之后) → (git push 之后) │ │ │ │ git add │ git commit │ git push ←────────────────┴ git restore / reset / pull ─┘

后面每条命令,都可以对照这张图想一遍「它把东西从哪儿搬到哪儿」。

一、基础配置

1. 配置用户名和邮箱

gitconfig--globaluser.name"Your Name"gitconfig--globaluser.email"your@email.com"

演示:

$gitconfig--globaluser.name"张三"$gitconfig--globaluser.email"zhangsan@example.com"

2. 查看配置

gitconfig--list

演示:

$gitconfig--listuser.name=张三user.email=zhangsan@example.com

二、仓库操作

3. 初始化本地仓库

gitinit

演示:

$mkdirmy-project&&cdmy-project $gitinit Initialized empty Git repositoryin/my-project/.git/

4. 克隆远程仓库

gitclone<仓库地址>

演示:

$gitclone https://github.com/user/repo.git Cloning into'repo'... remote: Enumerating objects:150, done.

三、日常提交流程

5. 查看文件状态

gitstatus

演示:

$gitstatus On branch main Changes not stagedforcommit: modified: README.md Untracked files: newfile.txt

6. 添加文件到暂存区

gitadd<文件名># 添加指定文件gitadd.# 添加所有文件

演示:

$gitaddREADME.md newfile.txt $gitstatus Changes to be committed: modified: README.md new file: newfile.txt

7. 提交更改

gitcommit-m"提交信息"

演示:

$gitcommit-m"修复登录页面bug,更新README"[main a1b2c3d]修复登录页面bug,更新README2files changed,25insertions(+),3deletions(-)

8. 一步提交(仅限已跟踪文件)

gitcommit-am"提交信息"

演示:

$gitcommit-am"更新配置文件"[main e4f5g6h]更新配置文件1filechanged,10insertions(+),2deletions(-)

注意-am不会把新建的未跟踪文件加进来,新文件还是要先git add。

四、分支管理

9. 查看分支

gitbranch# 本地分支gitbranch-a# 所有分支(含远程)

演示:

$gitbranch * main develop feature-login

10. 创建分支

gitbranch<分支名>

演示:

$gitbranch feature-payment $gitbranch develop feature-login feature-payment * main

11. 切换分支

gitswitch<分支名># Git 2.23+ 推荐gitcheckout<分支名># 旧写法

演示:

$gitswitch feature-payment Switched to branch'feature-payment'

12. 创建并切换分支

gitswitch-c<分支名># Git 2.23+ 推荐gitcheckout-b<分支名># 旧写法

演示:

$gitswitch-cfeature-search Switched to a new branch'feature-search'

13. 合并分支

gitmerge<要合并的分支名>

演示:(当前在main,合并develop)

$gitswitch main $gitmerge develop Updating a1b2c3d..e4f5g6h Fast-forward src/app.js|15+++++++++++++++1filechanged,15insertions(+)

14. 删除分支

gitbranch-d<分支名># 安全删除(已合并)gitbranch-D<分支名># 强制删除

演示:

$gitbranch-dfeature-login Deleted branch feature-login(was e4f5g6h).

五、远程操作

15. 查看远程仓库

gitremote-v

演示:

$gitremote-vorigin https://github.com/user/repo.git(fetch)origin https://github.com/user/repo.git(push)

16. 添加远程仓库

gitremoteadd<别名><仓库地址>

演示:

$gitremoteaddupstream https://github.com/original/repo.git

17. 推送代码

gitpush<远程名><分支名>gitpush-uorigin main# 首次推送并设置上游

演示:

$gitpush origin feature-payment Enumerating objects:5, done. To https://github.com/user/repo.git *[new branch]feature-payment ->feature-payment

18. 拉取代码

gitpull<远程名><分支名>gitpull# 拉取当前分支更新

演示:

$gitpull origin main From https://github.com/user/repo * branch main ->FETCH_HEAD Updating a1b2c3d..z9y8x7w

19. 获取远程更新(不自动合并)

gitfetch

演示:

$gitfetch origin remote: Enumerating objects:10, done. From https://github.com/user/repo a1b2c3d..z9y8x7w main ->origin/main

pull=fetch+merge。想先看一眼远程发生了什么再决定怎么合并,就用fetch。

六、查看历史

20. 查看提交日志

命令说明
git log详细日志
git log --oneline简洁版(一行一条)
git log --graph --oneline --all图形化分支历史

演示:

$gitlog--onelinea1b2c3d(HEAD ->main)修复登录页面bug,更新README e4f5g6h 添加支付功能模块 z9y8x7w 初始化项目

21. 查看某次提交详情

gitshow<commit-hash>

演示:

$gitshow a1b2c3d commit a1b2c3d... Author: 张三<zhangsan@example.com>Date: Mon Jun102026修复登录页面bug,更新READMEdiff--gita/README.md b/README.md...

22. 查看文件变更差异

命令比较范围
git diff工作区 ↔ 暂存区
git diff --staged暂存区 ↔ 最新提交

演示:

$gitdiffdiff--gita/README.md b/README.md -旧内容行 +新内容行

七、撤销与回退(重点,面试常问)

这一节是整个手册里最容易出事的地方,每条都先想清楚「它作用在哪个区」再敲回车。

23. 撤销工作区修改

gitrestore<文件名># Git 2.23+ 推荐gitcheckout --<文件名># 旧写法

演示:

$gitrestore README.md

24. 取消暂存

gitrestore--staged<文件名># Git 2.23+ 推荐gitreset HEAD<文件名># 旧写法

演示:

$gitrestore--stagednewfile.txt

25. 回退提交(保留修改)

gitreset--softHEAD~1

演示:

$gitreset--softHEAD~1 $gitstatus Changes to be committed: modified: README.md

26. 回退提交(丢弃修改)

⚠️危险操作:修改将永久丢失,动手前先git log记下当前 commit hash。

gitreset--hardHEAD~1

演示:

$gitreset--hardHEAD~1 HEAD is now at e4f5g6h 添加支付功能模块

27. 安全撤销(用新提交抵消旧提交)

gitrevert<commit-hash>

演示:

$gitrevert a1b2c3d[main f7g8h9i]Revert"修复登录页面bug,更新README"1filechanged,3insertions(+),25deletions(-)

reset 三种模式对比(面试常问):

模式本地仓库暂存区工作区适用场景
--soft回退保留保留重新组织提交
--mixed(默认)回退清空保留重新 add 再提交
--hard回退清空清空彻底丢弃(危险)

revert 与 reset 怎么选:分支已经推送到远程、别人可能拉过 → 用revert(生成新提交,不改历史);本地私有分支还没推 → 用reset(干净,不留「撤销提交」)。

八、储藏与标签

28. 储藏当前修改

gitstashgitstash save"描述"

演示:

$gitstash save"临时保存支付功能开发进度"Saved working directory and index state On main: 临时保存支付功能开发进度

29. 查看储藏列表

gitstash list

演示:

$gitstash list stash@{0}: On main: 临时保存支付功能开发进度

30. 恢复储藏

命令说明
git stash pop恢复并删除储藏
git stash apply恢复但保留储藏

演示:

$gitstash pop On branch main Changes not stagedforcommit: modified: payment.js

31. 创建标签

gittag<标签名># 轻量标签gittag-a<标签名>-m"说明"# 附注标签(推荐)

演示:

$gittag-av1.0.0-m"第一个正式版本发布"$gittag v1.0.0

32. 推送标签

gitpush origin<标签名>gitpush origin--tags# 推送所有标签

演示:

$gitpush origin v1.0.0

git push默认不会推送标签,发版时记得单独推。

九、三个完整组合场景

场景一:日常开发完整流程

# 1. 拉取最新代码gitpull origin main# 2. 创建功能分支gitswitch-cfeature-xxx# 3. 编写代码后,添加修改gitadd.# 4. 提交gitcommit-m"完成xxx功能"# 5. 推送远程gitpush origin feature-xxx# 6. 在 GitHub / GitLab 上创建 Pull Request

场景二:紧急修复线上 Bug

# 1. 切回主分支并拉取最新gitswitch maingitpull origin main# 2. 创建修复分支gitswitch-chotfix-urgent# 3. 修复 bug 后提交gitadd.gitcommit-m"紧急修复支付异常"# 4. 切回 main 并合并gitswitch maingitmerge hotfix-urgent# 5. 推送并清理gitpush origin maingitbranch-dhotfix-urgent

场景三:解决合并冲突

$gitmerge feature-payment Auto-merging payment.js CONFLICT(content): Merge conflictinpayment.js Automatic merge failed;fix conflicts andthencommit.# 手动编辑 payment.js,处理冲突标记:# <<<<<<< HEAD# 当前分支的内容# =======# 被合并分支的内容# >>>>>>> feature-payment# 解决后标记完成$gitaddpayment.js $gitcommit-m"合并 feature-payment,解决冲突"

最需要记住的几句话

  1. 主调节拍是 add → commit → push,所有命令都是围绕「工作区、暂存区、本地仓库、远程仓库」四区搬东西。
  2. 撤销分三层:工作区用git restore,暂存区用git restore --staged,已提交的用revert(公共分支)或reset(私有分支)。
  3. reset --hard会真丢代码,回车前先git log记下 hash,给自己留一条后路。
  4. git push不推标签,发版要git push origin <tag>或--tags。
  5. 新写的分支功能别直接怼 main:先switch -c拉分支,走 Pull Request,出事好回退。

我的复盘

我一开始把git checkout当万能命令用:切分支用它、丢弃修改也用它。直到有一次想「放弃某个文件的改动」,结果顺手把还没提交的整块工作区都洗掉了,才明白一个命令承担太多语义,就容易按错。后来 Git 2.23 出了switch(专管分支)和restore(专管撤销),我把肌肉记忆整体迁了过去,误操作基本绝迹。

另一个教训是reset --hard。现在我的习惯是:任何回退操作前先git log --oneline截个 hash 放在终端里,真删错了还能git reset --hard <hash>找回来。Git 的「删除」大多数时候只是移动了指针,冷静下来都能救回来——但前提是你记得那个 hash。

给读者的建议:不要背命令清单,按第九节的三个场景把完整流程各跑一遍(找个测试仓库),之后按场景回忆命令,比按字母序背牢得多。

提示:git switch/git restore需要Git 2.23+,更早的版本请继续用git checkout系列。


本系列导航

  • 01 Git 常用指令速查:9 大分类 32 条核心命令与实战演示(本篇)
  • 02 Linux 命令速查大全:82 条常用指令与面试高频考点

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进