🐙 Git 从入门到面试能吹的那些事

"会用 Git 不稀奇,能讲明白才值钱。"

本文让你从 git add . 的机械工人,变成能聊底层原理 + 面试加分的 Git 社交达人。


1. Git 是什么?

先来个官方说法:

Git 是一个分布式版本控制系统,用来记录代码变更历史,方便多人协作。

翻译成人话:

  • 它是代码界的时光机
  • 支持你随时穿越回过去(reflog 就像游戏存档)
  • 多人协作时,它就像一群厨子一起炒菜,每个人有自己的灶台,最后再把菜端到一张桌上。

2. Git 的三大区域

  • 工作区(Working Directory) :你正在写的代码文件。
  • 暂存区(Staging Area) :已经打包好,等着快递的改动。
  • 本地仓库(Local Repository) :正式存档的历史版本。

命令速记:

bash 复制代码
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 的世界。
bash 复制代码
# 创建并切换
git switch -c feature/login

# 合并回主分支
git switch main
git merge feature/login

小贴士

  • 合并用 merge 安全可靠
  • 想要历史好看,可以 rebase(别在别人用的分支上乱 rebase)

5. 远程协作的日常

bash 复制代码
git clone <url>         # 拿到别人的代码副本
git fetch               # 拉取最新改动(不影响你当前文件)
git pull                # 拉取 + 合并(或 rebase)
git push origin main    # 推送你的改动

脑补场景:

  • fetch:去看快递柜里有什么新快递,但先不取
  • pull:看完直接取回家
  • push:你把自己的菜送到团队大锅里

6. 史诗级救命技能

  1. 撤销最近一次提交(保留改动)

    bash 复制代码
    git reset --soft HEAD~1
  2. 回到某个提交

    css 复制代码
    git reset --hard <commit-id>
  3. 找回"丢失"的提交

    css 复制代码
    git reflog
    git reset --hard <reflog-id>
  4. 挑一个提交到当前分支

    python 复制代码
    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。

  • 理解原理:三大区域 + 分支模型。

  • 面试吹点:

    1. 团队分支策略(Git Flow / GitHub Flow)
    2. 规范化提交(Conventional Commits)
    3. 在 CI/CD 流程中结合 Git Hooks 提升质量

9. 送你一份 Git 冷笑话

面试官:你会 Git 吗?

我:会啊,我是 Git 大师。

面试官:那帮我 reset 一下刚才问的问题。

我:git reset --hard

面试官:......你回家等通知吧。

相关推荐
崔庆才丨静觅1 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60612 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了2 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅2 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅3 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅3 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment3 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅4 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊4 小时前
jwt介绍
前端
爱敲代码的小鱼4 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax