🐙 Git 从入门到面试能吹的那些事
“会用 Git 不稀奇,能讲明白才值钱。”
本文让你从git add .
的机械工人,变成能聊底层原理 + 面试加分的 Git 社交达人。
1. Git 是什么?
先来个官方说法:
Git 是一个分布式版本控制系统,用来记录代码变更历史,方便多人协作。
翻译成人话:
- 它是代码界的时光机
- 支持你随时穿越回过去(reflog 就像游戏存档)
- 多人协作时,它就像一群厨子一起炒菜,每个人有自己的灶台,最后再把菜端到一张桌上。
2. Git 的三大区域
- 工作区(Working Directory) :你正在写的代码文件。
- 暂存区(Staging Area) :已经打包好,等着快递的改动。
- 本地仓库(Local Repository) :正式存档的历史版本。
命令速记:
git add . # 把工作区改动送到暂存区
git commit -m "fix: 修复登录 Bug" # 把暂存区的改动送进历史
3. 常用 Git 命令(带脑洞解释)
命令 | 作用 | 脑洞版记忆 |
---|---|---|
git status |
看当前状态 | “摸一摸脉搏” |
git log |
看历史记录 | “翻家谱” |
git diff |
看改了啥 | “照镜子对比一下” |
git branch |
看分支 | “看看我开了几条平行世界” |
git switch / git checkout
|
切换分支 | “从一个世界跳到另一个世界” |
git merge |
合并分支 | “两个世界融合” |
git rebase |
变基 | “时空线性整理” |
4. 分支:Git 的平行宇宙
- 主分支(main/master) :上线版本的世界线。
- 功能分支(feature/xxx) :新功能试验田。
- 修复分支(hotfix/xxx) :紧急修 bug 的世界。
# 创建并切换
git switch -c feature/login
# 合并回主分支
git switch main
git merge feature/login
小贴士:
- 合并用
merge
安全可靠 - 想要历史好看,可以
rebase
(别在别人用的分支上乱 rebase)
5. 远程协作的日常
git clone <url> # 拿到别人的代码副本
git fetch # 拉取最新改动(不影响你当前文件)
git pull # 拉取 + 合并(或 rebase)
git push origin main # 推送你的改动
脑补场景:
- fetch:去看快递柜里有什么新快递,但先不取
- pull:看完直接取回家
- push:你把自己的菜送到团队大锅里
6. 史诗级救命技能
-
撤销最近一次提交(保留改动)
git reset --soft HEAD~1
-
回到某个提交
git reset --hard <commit-id>
-
找回“丢失”的提交
git reflog git reset --hard <reflog-id>
-
挑一个提交到当前分支
git cherry-pick <commit-id>
记住:
reset --hard
像是核弹,一定确认无误再按。
7. 面试常考 Git 题
Q1: Git pull 和 Git fetch 有什么区别?
答:
-
fetch
:只下载远程最新记录,本地不动。 -
pull
:相当于fetch + merge
(或 rebase)。
面试加分:有时先 fetch 再手动合并更安全。
Q2: merge 和 rebase 的区别?
答:
-
merge
:保留分支的合并历史,可能有多叉结构。 -
rebase
:将提交“搬到”目标分支顶部,历史线性更清爽。
加分点:团队协作时,在共享分支用 merge,自己分支可以 rebase 保持整洁。
Q3: 如何撤销已经 push 上去的错误提交?
答:
- 如果要保留历史:用
git revert
生成一个反向提交。 - 如果可以改历史(风险大):用
git reset --hard
+git push --force-with-lease
,但要确保没人基于你的提交工作。
Q4: .gitignore 是干嘛的?
答:
- 用来指定 Git 不跟踪的文件(如
node_modules/
、dist/
、.env
)。 - 注意
.gitignore
只能忽略未被追踪的文件,已经提交过的需要用git rm --cached
移除追踪。
Q5: Git rebase -i 有什么用?
答:
-
-i
是交互式变基,可以合并提交(squash)、修改提交信息(reword)、删除提交(drop)、调整顺序等。 - 面试加分:常用来清理杂乱的历史提交,让 PR 更优雅。
8. 总结 & 面试吹法
-
会基本命令:加、提、切、合、推、拉。
-
会救命操作:reset、reflog、stash、cherry-pick。
-
理解原理:三大区域 + 分支模型。
-
面试吹点:
- 团队分支策略(Git Flow / GitHub Flow)
- 规范化提交(Conventional Commits)
- 在 CI/CD 流程中结合 Git Hooks 提升质量
9. 送你一份 Git 冷笑话
面试官:你会 Git 吗?
我:会啊,我是 Git 大师。
面试官:那帮我 reset 一下刚才问的问题。
我:git reset --hard
面试官:……你回家等通知吧。