Git 核心知识点全解析
Git 是软件开发领域最基础、最核心的技能之一更是后端、前端、测试等各类技术面试的高频考点——无论是校招基础面还是社招进阶面Git 的核心概念、操作命令、协作流程几乎是必问内容。本篇文章以「面试复习」为导向用「通俗类比专业解析」的方式系统梳理 Git 从底层原理到高级用法的全知识点补充易混淆点和记忆技巧结尾汇总高频面试题及标准答题思路助力你面试时从容应答、直接背诵。一、Git 核心概念与底层模型面试基础必问1.1 Git 是什么通俗专业双重解读通俗说Git 就是一个「代码版本管家」能记住你每次修改的内容、谁改的、什么时候改的就算改崩了也能回滚到之前的正常版本还能支持多个人一起改代码不冲突。专业定义Git 是一个分布式版本控制系统用于高效管理项目代码的版本历史。与 SVN 等集中式版本控制系统的核心区别的是Git 允许每个开发者拥有代码库的完整副本包含全部历史记录无需依赖中央服务器就能完成本地提交、版本回退等操作离线也能工作且操作速度更快。补充记忆点分布式 每个人都有「完整备份」集中式 只有中央服务器有完整备份一旦中央服务器故障数据可能丢失Git 速度快的核心原因是「大部分操作在本地完成」无需联网请求中央服务器。对比维度Git分布式SVN集中式面试答题关键架构每人拥有完整仓库副本只有一个中央仓库分布式容错性更强无单点故障速度更快本地操作无需频繁联网较慢几乎所有操作都需联网请求中央仓库本地操作减少网络开销提升效率离线工作支持本地可提交联网后同步不支持断网无法提交、查看历史分布式的核心优势适合异地开发分支轻量、快速本质是指针移动重量、缓慢需复制整个目录Git 分支创建/切换秒级完成不占用额外存储空间1.2 三大核心区域必背面试高频提问Git 本地仓库有三个核心区域记住「草稿纸→待提交清单→档案柜」的类比就能快速区分永不混淆工作区Working Directory通俗说就是「你电脑里能看到的项目文件夹」是你实际编辑代码的地方相当于「草稿纸」——你在上面写代码、改代码都是在工作区操作。专业项目的实际目录存储当前正在编辑的文件未被 Git 跟踪的文件也存放在这里。暂存区Staging Area / Index通俗说就是「待提交清单」你改完草稿纸工作区后把要提交的内容挑出来放到这个清单里等待最终确认提交。专业一个临时存储区域本质是 .git/index 文件存放即将被提交到版本库的修改可理解为「工作区和版本库之间的缓冲区」。版本库Repository通俗说就是「档案柜」你确认清单暂存区里的内容无误后提交到档案柜这里会永久保存所有提交历史和版本信息就算工作区、暂存区的内容丢了也能从这里恢复。专业位于项目根目录的 .git 隐藏目录中存储所有提交对象、树对象、 blob 对象是 Git 仓库的核心。核心流转关系必背工作区编辑代码 →git add添加到待提交清单 →暂存区→git commit提交到档案柜 →版本库。面试要点面试官常直接问「Git 三大核心区域的区别和流转关系」直接背诵上面的类比专业定义流转命令即可满分应答。1.3 Git 底层对象模型进阶面试考点通俗说Git 本质是一个「文件仓库」所有代码、目录、提交记录都被拆成4种不可变的「对象」存储就像乐高积木每一次提交都是用这些积木拼出来的。专业Git 是一个基于键值对的内容寻址文件系统所有数据都以不可变对象一旦创建无法修改只能新增的形式存储通过哈希值SHA-1唯一标识每个对象。四种核心对象的作用的如下对象类型通俗作用专业作用关键特性面试必说Blob数据对象存单个文件的内容比如一个 .java 文件的代码存储文件的原始内容不包含文件名、路径等元信息只存内容不存文件名文件名和路径保存在 Tree 对象中相同内容的文件只生成一个 Blob 对象节省空间Tree树对象存目录结构比如哪个文件夹里有哪些文件表示项目的目录结构记录路径与 Blob/Tree 对象的映射关系相当于文件系统中的「文件夹」一个 Tree 可以包含多个 Blob文件和子 Tree子文件夹Commit提交对象存一次提交的「说明书」谁提交的、什么时候提交、提交了什么、之前的版本是什么记录一次提交的元数据是版本历史的核心包含作者信息、时间戳、提交说明、指向一个 Tree 对象当前提交的目录结构、父提交指针关联上一次提交形成历史链Tag标签对象给某个重要的提交「贴标签」比如版本发布 v1.0标记特定的提交用于版本发布、里程碑标记是一种固定的引用对象不随分支移动分为轻量标签仅指向提交和附注标签包含详细说明补充记忆点必背对象Blob/Tree/Commit是不可变的一旦创建就无法修改只能通过创建新对象来记录变化我们平时操作的「分支」「提交」本质都是移动指针指向不同的 Commit 对象。核心逻辑每次git add会把工作区的文件内容转化为 Blob 对象更新暂存区Index每次git commit会根据暂存区的内容生成一棵 Tree 对象再创建一个 Commit 对象关联这个 Tree 和上一次的 Commit形成提交历史。二、基础命令与文件状态面试基础必背2.1 文件生命周期4种状态流转关系必背Git 中的文件有4种状态记住流转图和对应命令面试时能快速应答结合通俗解读更容易记Untracked未跟踪通俗说「Git 不认识这个文件」新创建的文件比如新建的 test.txt还没告诉 Git 要管理它。Modified已修改通俗说「文件改了但还没放到待提交清单」已经被 Git 管理的文件比如之前提交过的 test.txt又做了新的修改。Staged已暂存通俗说「文件改完了已经放到待提交清单就等确认提交」通过git add把修改加入暂存区。Committed已提交通俗说「文件已经放到档案柜永久保存」通过git commit把暂存区的内容提交到版本库。状态流转图必背可直接默写Untracked未跟踪 →(gitadd)→ Staged已暂存 →(git commit)→ Committed已提交 ↑ ↓(修改文件)← Modified已修改 ←(修改文件)补充反向操作面试可能追问Staged → Untrackedgit rm --cached 文件名取消暂存且不再跟踪该文件Staged → Modifiedgit restore --staged 文件名取消暂存修改保留在工作区Modified → Untrackedgit checkout -- 文件名或git restore 文件名放弃工作区修改回到上一次暂存/提交状态2.2 日常核心命令速查可直接背诵面试常考用法重点记「命令作用常用示例面试易错点」避免只记命令不知道怎么用、什么时候用。命令核心作用常用示例面试易错点/补充说明git init初始化本地 Git 仓库git init执行后项目根目录会生成 .git 隐藏目录版本库仅初始化一次git clone克隆远程仓库到本地下载完整副本git clone 远程仓库地址克隆后会自动关联远程仓库默认名为 origin无需手动执行 git remote addgit status查看文件状态未跟踪、已修改、已暂存git status -s精简输出更高效面试常问如何快速查看文件状态答git status -s能快速区分不同状态的文件git add将工作区修改加入暂存区git add .添加所有变更包括新增、修改、删除git add 文件名添加指定文件git add . 和 git add -A 作用一致全部添加git add -u 只添加已跟踪文件的修改和删除不添加新增文件git commit将暂存区内容提交到版本库git commit -m “提交说明”常用git commit -am “提交说明”跳过暂存区直接提交已跟踪文件的修改提交说明要规范如 feat: 新增功能、fix: 修复bug面试可能问「如何规范提交信息」git diff查看不同区域的代码差异git diff工作区 vs 暂存区git diff --staged暂存区 vs 版本库git diff 分支1 分支2两个分支的差异面试常问如何查看暂存区和版本库的差异答git diff --staged或 git diff --cachedgit log查看提交历史git log --oneline精简显示一行一个提交git log --oneline --graph图形化显示分支合并历史常用参数–author用户名查看指定作者的提交–since3days查看近3天的提交三、分支管理与合并策略面试高频重点必背3.1 分支的本质通俗专业面试必问通俗说Git 的分支就是一个「可移动的标签」标签指向某个提交对象你切换分支本质就是移动这个标签指向不同的提交。而 HEAD 是一个特殊指针相当于「你的当前位置指示器」永远指向你正在工作的分支。专业定义Git 中的分支本质是一个指向 Commit 对象的可移动指针默认分支名为 main或 master创建分支时只是新建一个指针不复制任何文件因此创建和切换分支的速度极快秒级。补充记忆点正因为分支是指针所以 Git 分支轻量、高效与 SVN 分支复制整个目录有本质区别这也是面试常考的对比点。3.2 分支操作命令可直接背诵常用且必考操作场景核心命令补充说明面试易错点查看分支git branch查看本地分支* 标记当前分支git branch -a查看本地远程所有分支远程分支显示为 remotes/origin/分支名比如 remotes/origin/dev创建分支git branch 分支名仅创建分支不切换到该分支比如 git branch dev创建 dev 分支仍在当前分支切换分支git checkout 分支名git switch 分支名Git 2.23 新增更直观切换分支前需提交工作区/暂存区的修改或用 git stash 临时保存否则会报错创建并切换分支git checkout -b 分支名git switch -c 分支名最常用的分支创建方式相当于「先创建分支再切换分支」一步完成删除分支git branch -d 分支名删除已合并到主分支的分支git branch -D 分支名强制删除无论是否合并不能删除当前所在的分支需先切换到其他分支比如 main再删除3.3 Merge 与 Rebase核心对比面试必问重中之重通俗类比Merge 和 Rebase 都是「把两个分支的代码合并到一起」但方式不同——Merge 是「两条路汇合保留分叉痕迹」Rebase 是「把一条路接到另一条路的尽头变成一条直线」。专业解析两者都能实现分支合并但原理、效果、适用场景截然不同是面试高频考点务必记住对比维度和黄金法则。对比维度git merge合并git rebase变基面试答题要点历史记录保留完整历史呈分叉状能看到两个分支的开发轨迹线性历史整洁干净看不到分叉仿佛所有提交都在一条分支上merge 不破坏历史rebase 整理历史使提交记录更清晰额外提交会创建一个新的「合并提交Merge Commit」不产生额外提交只是复制原提交生成新的提交哈希值merge 会增加一个无实际代码修改的合并提交rebase 不会是否修改历史不修改已有提交历史记录不可变重写提交历史复制原提交生成新哈希原提交被放弃这是两者最核心的区别也是 Rebase 黄金法则的核心依据适用场景公共分支合并如 main/develop 分支本地私有分支整理如自己开发的 feature 分支结合场景答题能体现你的实战经验加分项黄金法则无限制可放心使用不要 rebase 已推送的公共分支重点背诵公共分支 rebase 会重写历史导致团队其他成员的本地分支与远程冲突引发协作灾难面试加分回答可直接背诵对于公共分支如 main、develop使用 git merge 合并保留完整的开发历史便于追溯问题对于本地私有功能分支如 feature/login在合并到主分支前可先 git rebase main将本地提交复制到主分支最新提交之后使主分支历史保持线性整洁同时避免产生多余的合并提交。3.4 合并策略详解面试追问考点Git 合并分支时会根据分支的分叉情况自动选择合并策略面试可能追问不同策略的区别和适用场景重点记4种核心策略合并策略通俗说明专业说明适用场景Fast-forward快进合并主分支没有新提交直接把主分支指针移动到 feature 分支的最新提交相当于「追着 feature 分支走」当目标分支如 main是当前分支如 feature的直接祖先时不创建合并提交直接移动分支指针分支未分叉只有一个分支在开发如单人开发 feature 分支主分支无变动Three-way merge三方合并主分支和 feature 分支都有新提交找两个分支的公共祖先把三方公共祖先、主分支最新、feature 最新的修改合并创建合并提交使用两个分支的末端提交 公共祖先提交进行三方对比合并差异生成新的合并提交分支已分叉多人协作如主分支有其他人提交自己的 feature 分支也有提交–no-ff强制创建合并提交就算能快进合并也强制创建一个合并提交留下 feature 分支的开发痕迹禁用快进合并无论是否满足快进条件都生成合并提交保留分支结构希望保留功能分支的开发痕迹便于后续追溯如团队规范要求所有 feature 分支合并都用 --no-ffSquash merge压缩合并把 feature 分支的所有提交压缩成一个提交再合并到主分支主分支只显示一个合并提交将目标分支的多个提交压缩为一个单独的提交再合并到当前分支不保留目标分支的提交历史希望主分支历史简洁不关心 feature 分支的具体提交细节如 feature 分支有很多小提交合并后不想让主分支杂乱面试高频追问「–no-ff 和 fast-forward 的区别是什么」直接背诵答fast-forward 不创建合并提交直接移动指针无法看出分支合并痕迹–no-ff 强制创建合并提交即使可以快进好处是保留了功能分支的开发痕迹便于后续追溯整个功能的开发过程。四、远程协作与工作流实战类面试题必背4.1 远程操作核心命令常用面试必问远程协作的核心是「本地仓库与远程仓库的同步」重点记命令的作用和区别尤其是 fetch 和 pull 的差异。命令核心作用常用示例面试补充说明git remote -v查看本地关联的远程仓库列表显示远程仓库名称和地址git remote -v默认远程仓库名称为 origin是 git clone 时自动关联的git remote add关联远程仓库手动关联git clone 后无需执行git remote add origin 远程仓库地址origin 是远程仓库的别名可自定义如 git remote add github 地址git fetch拉取远程仓库的最新更新下载到本地远程跟踪分支不自动合并到本地分支git fetch origin拉取 origin 远程的所有更新git fetch origin main只拉取 main 分支的更新安全可先查看远程更新再决定是否合并避免盲目合并导致冲突git pull拉取远程更新并自动合并到当前本地分支等价于 git fetch git mergegit pull origin main拉取 origin 的 main 分支合并到当前本地分支便捷但有风险若本地有未提交的修改可能导致合并冲突git push将本地分支的提交推送到远程对应分支git push origin main推送本地 main 分支到远程 main 分支git push -u origin dev第一次推送 dev 分支关联本地和远程分支推送失败可能是远程分支有更新需先 git pull 同步解决冲突后再推送4.2 git fetch vs git pull面试必问核心区别通俗类比git fetch 是「先去远程看看有什么新东西下载到本地但不直接用」git pull 是「直接去远程把新东西拿过来立刻用到自己的分支上」。核心区别必背git fetch仅拉取远程更新到本地远程跟踪分支如 origin/main不修改本地工作分支需手动执行 git merge 合并安全可控git pull拉取远程更新后自动合并到当前本地分支无需手动操作但如果本地有未提交的修改容易产生合并冲突风险较高。面试加分实践多人协作时最佳做法是「先 git fetch 查看远程更新确认无冲突或冲突可解决后再手动 git merge 合并」避免直接用 git pull 导致冲突难以处理。4.3 主流分支协作模型面试实战考点面试可能问「你们团队用什么 Git 协作模型如何协作」重点记3种主流模型的核心特点和适用场景结合自身项目经验无经验可背诵模板。协作模型核心特点协作流程简化可背诵适用场景GitHub Flow最简单只有 main 分支是常驻可发布分支无其他长期分支所有开发都从 main 切短生命周期分支feature/bugfix开发完成后 PR 合并合并后删除分支1. 从 main 切 feature 分支开发2. 提交代码推送 feature 分支到远程3. 发起 PR团队 Review4. Review 通过后合并到 main5. 删除 feature 分支SaaS 产品、高频发布团队如互联网创业公司迭代速度快无需复杂版本管理Git Flow最经典双主干分支main 生产分支 develop 开发分支 临时分支feature/release/hotfixmain 只存可发布版本develop 存开发中的版本1. 从 develop 切 feature 分支开发2. 开发完成合并到 develop3. 从 develop 切 release 分支测试4. 测试通过合并到 main 和 develop5. 线上 bug 从 main 切 hotfix 分支修复修复后合并到 main 和 develop有明确版本发布周期的产品如客户端软件、版本化工具需要严格区分开发、测试、生产版本Trunk-Based大规模团队所有人围绕主干main开发切极短生命周期的分支1-2天内合并依赖强 CI/CD 和 Feature Flag功能开关控制功能发布避免影响线上1. 从 main 切短分支开发2. 开发完成后快速合并回 main通过 CI 检测3. 用 Feature Flag 控制功能是否在线上显示4. 功能稳定后删除 Feature Flag大规模团队如大厂、快速迭代场景依赖自动化测试和部署能力五、撤销、回退与高级操作面试进阶考点易混淆5.1 git reset 的三种模式必背面试高频git reset 是 Git 中最常用的撤销/回退命令三种模式的区别是面试重点用「档案柜→待提交清单→草稿纸」的类比轻松记住模式HEAD 指针移动暂存区待提交清单工作区草稿纸通俗用途专业用途–soft软重置✅ 移动回到指定提交✅ 保留暂存区内容不变✅ 保留工作区内容不变撤销提交但修改还在待提交清单里想重新编辑提交说明或补充修改后再提交撤销最近的提交保留暂存区和工作区的修改便于重新提交–mixed默认模式✅ 移动回到指定提交❌ 重置清空暂存区✅ 保留工作区内容不变撤销提交和待提交清单修改回到草稿纸想重新挑选要提交的内容将提交和暂存区回退修改保留在工作区是最常用的重置模式–hard硬重置✅ 移动回到指定提交❌ 重置清空暂存区❌ 清空删除工作区所有修改彻底回到过去删除所有未提交的修改相当于「一键还原」风险极高彻底回退到指定提交状态丢弃所有未提交的改动工作区暂存区谨慎使用面试要点git reset --hard 是危险操作会永久丢失未提交的改动使用前务必确认没有需要保留的修改如果误操作可通过 git reflog 找回下文会讲。常用示例可背诵git reset --soft HEAD~1撤销最近1次提交修改保留在暂存区git reset --mixed HEAD~2撤销最近2次提交修改保留在工作区暂存区清空git reset --hard 提交哈希值彻底回退到指定提交所有未提交修改丢失5.2 git reset vs git revert面试必问核心区别两者都能实现「撤销修改」但核心区别在于「是否修改历史」这是面试高频考点结合适用场景背诵对比维度git reset重置git revert还原面试答题要点核心原理移动 HEAD 指针重写提交历史丢弃指定提交创建一个新的提交抵消目标提交的所有改动不修改原有历史reset 是「删除历史」revert 是「补充历史」这是最核心的区别是否修改历史✅ 是重写已有提交的历史链❌ 否新增提交原有历史完整保留历史可追溯性revert 更安全适合团队协作适用场景本地未推送的提交自己开发还没推送到远程可随意重置已推送到远程的提交团队共享的分支不能修改历史只能用 revert 安全撤销面试标准答案已推送的提交必须用 git revert未推送的本地提交可用 git reset安全性较低可能丢失提交重写历史导致协作冲突较高历史完整可追溯不影响其他成员强调公共分支的已推送提交绝对不能用 git reset 撤销常用示例可背诵git revert 提交哈希值撤销指定提交生成新的 revert 提交git revert HEAD~1撤销最近1次已推送的提交5.3 其他高级操作面试常考补充记忆git stash临时保存修改必背通俗说工作区改了一半还不想提交要切换分支就把当前修改「临时存起来」切换分支后再恢复。核心命令可直接背诵git stash保存当前工作区和暂存区的修改默认生成 stash{0}git stash list查看所有临时保存的 stash 列表git stash pop恢复最近一次 stash 的修改并删除该 stash常用git stash apply恢复最近一次 stash 的修改保留该 stash可多次恢复git stash drop删除最近一次 stash面试考点什么时候用 git stash答切换分支前工作区有未提交的修改不想提交也不想丢失就用 git stash 临时保存。补充git stash 面试易错点——git stash 不会保存未跟踪文件Untracked若需保存未跟踪文件需执行git stash -uuuntracked示例git stash -u可同时保存已修改、已暂存和未跟踪文件。git reflog找回误操作必背面试救命考点通俗说Git 的「操作日志本」记录你所有的 Git 操作切换分支、提交、reset、rebase 等就算误删分支、用 git reset --hard 丢了修改也能通过它找回相当于「时光回溯」。核心命令可直接背诵git reflog查看所有 Git 操作记录包含已丢弃的提交、删除的分支指针每条记录有操作ID、操作描述、提交哈希。git reset --hard 操作ID通过 reflog 找到误操作前的操作ID用该命令恢复到对应状态找回丢失的修改或分支。面试考点当被问到「误执行 git reset --hard 丢了未提交的修改怎么找回」直接背诵用git reflog查看操作记录找到误操作前的操作ID执行git reset --hard 操作ID即可恢复因为 reflog 记录了所有本地操作即使提交被丢弃也能追溯。补充记忆点git reflog 只保存在本地远程仓库没有且默认保存90天超过时间会自动清理若需长期保存可修改 Git 配置。git cherry-pick挑选提交进阶考点通俗说「复制粘贴」某个分支的指定提交粘贴到当前分支相当于把别人的某个修改“拿过来”用不用合并整个分支。核心命令可直接背诵git cherry-pick 提交哈希值将指定提交的修改应用到当前分支生成一个新的提交哈希值与原提交不同。git cherry-pick -n 提交哈希值应用指定提交的修改但不自动提交可手动调整后再提交用于解决冲突后调整。git cherry-pick --abort若 cherry-pick 过程中出现冲突取消操作恢复到操作前状态。面试考点git cherry-pick 的适用场景答当需要将某个分支的单个/多个特定提交应用到当前分支而不需要合并整个分支时使用比如其他分支的一个bug修复提交需要同步到当前分支无需合并整个开发分支。易错点cherry-pick 会生成新的提交若原提交涉及的文件在当前分支有修改会产生冲突需先解决冲突再提交且不要对已推送的公共分支频繁使用 cherry-pick避免提交历史混乱。git tag标签操作基础进阶面试常考通俗说给某个重要的提交「贴个标签」比如版本发布v1.0、v2.0方便后续快速定位到该版本相当于给提交“起个外号”比记冗长的哈希值更方便。核心命令可直接背诵git tag 标签名 提交哈希值给指定提交打轻量标签默认仅指向提交无额外信息示例git tag v1.0 1234567。git tag -a 标签名 -m “标签说明” 提交哈希值打附注标签包含标签作者、时间、说明更规范示例git tag -a v1.0 -m 版本1.0 正式发布 1234567。git tag查看所有标签。git push origin 标签名将单个标签推送到远程仓库示例git push origin v1.0。git push origin --tags将所有本地标签一次性推送到远程仓库。git tag -d 标签名删除本地标签。git push origin --delete 标签名删除远程仓库的标签。面试考点轻量标签和附注标签的区别答轻量标签本质是一个指向提交的指针无任何额外信息附注标签是一个独立的标签对象包含标签作者、时间戳、标签说明更适合版本发布、里程碑标记推荐使用附注标签。六、高频面试题汇总可直接背诵满分应答本节汇总 Git 面试最常考的20道题基础进阶每道题搭配「标准答题思路」贴合面试场景无需额外拓展直接背诵即可从容应答。6.1 基础必考题校招/社招基础面必背问题1Git 和 SVN 的核心区别是什么必考答题思路核心是分布式 vs 集中式。1. 架构Git 是分布式每个开发者有完整仓库副本SVN 是集中式只有中央服务器有完整仓库。2. 速度Git 本地操作多速度更快SVN 依赖中央服务器速度慢。3. 离线工作Git 支持离线提交联网后同步SVN 断网无法操作。4. 分支Git 分支是轻量指针创建/切换快SVN 分支需复制目录笨重缓慢。问题2Git 的三大核心区域是什么流转关系是什么必考答题思路三大区域类比流转命令。1. 工作区电脑里可见的项目文件夹草稿纸编辑代码的地方。2. 暂存区待提交清单缓冲区存放即将提交的修改。3. 版本库.git 隐藏目录档案柜永久保存提交历史。流转关系工作区 →git add→ 暂存区 →git commit→ 版本库。问题3Git 中文件的4种状态是什么如何流转答题思路4种状态流转命令。1. 未跟踪Untracked新创建文件Git 未管理。2. 已修改Modified已跟踪文件被修改未暂存。3. 已暂存Staged修改已加入暂存区待提交。4. 已提交Committed修改已提交到版本库。流转Untracked→git add→Staged→git commit→CommittedModified→git add→StagedStaged→git restore --staged→Modified。问题4git add . 和 git add -u 的区别是什么答题思路核心是“是否添加未跟踪文件”。git add . 添加所有变更新增、修改、删除的文件git add -u 只添加已跟踪文件的修改和删除不添加未跟踪的新增文件。问题5git commit -m 和 git commit -am 的区别是什么答题思路核心是“是否跳过暂存区”。git commit -m 只能提交暂存区的内容需先执行 git addgit commit -am 跳过暂存区直接提交已跟踪文件的修改无法提交未跟踪文件。问题6如何查看 Git 提交历史常用参数有哪些答题思路核心命令常用参数。命令git log。常用参数–oneline精简显示一行一个提交–graph图形化显示分支合并历史–author用户名查看指定作者提交–since3days查看近3天提交。问题7git diff 相关的常用命令有哪些分别查看什么差异答题思路3个核心用法。1. git diff查看工作区与暂存区的差异。2. git diff --staged或 --cached查看暂存区与版本库的差异。3. git diff 分支1 分支2查看两个分支的代码差异。6.2 分支与合并必考题社招高频重点问题8Git 分支的本质是什么为什么 Git 分支比 SVN 分支高效答题思路本质对比优势。1. 本质Git 分支是一个指向 Commit 对象的可移动指针创建分支只是新建指针不复制文件。2. 高效原因SVN 分支需要复制整个目录笨重缓慢Git 分支仅操作指针创建/切换秒级完成不占用额外存储空间。问题9git merge 和 git rebase 的核心区别是什么适用场景分别是什么必考答题思路核心区别场景结合通俗类比。1. 历史记录merge 保留分叉历史生成合并提交rebase 整理为线性历史不生成额外提交。2. 历史修改merge 不修改已有历史rebase 重写提交历史复制提交生成新哈希。3. 适用场景merge 用于公共分支如 main合并保留开发痕迹rebase 用于本地私有分支如 feature整理使历史整洁。4. 黄金法则不要 rebase 已推送的公共分支避免协作冲突。问题10Git 的合并策略有哪些fast-forward 和 --no-ff 的区别是什么高频追问答题思路4种策略核心区别。1. 合并策略fast-forward快进合并、Three-way merge三方合并、–no-ff强制创建合并提交、Squash merge压缩合并。2. 核心区别fast-forward 不创建合并提交直接移动指针无分支合并痕迹–no-ff 强制创建合并提交即使可快进保留功能分支开发痕迹便于追溯。问题11切换分支前工作区有未提交的修改该如何处理答题思路3种解决方案按优先级排序。1. 提交修改执行git add .git commit -m 提交说明提交后再切换分支。2. 临时保存执行git stash保存修改后切换分支后续用git stash pop恢复。3. 放弃修改执行git restore 文件名放弃单个文件或git reset --hard HEAD放弃所有修改谨慎使用。问题12如何删除本地分支和远程分支答题思路分本地和远程明确命令差异。1. 本地分支git branch -d 分支名删除已合并分支git branch -D 分支名强制删除无论是否合并注意不能删除当前所在分支。2. 远程分支git push origin --delete 分支名。6.3 远程协作必考题实战类必背问题13git fetch 和 git pull 的核心区别是什么推荐的协作流程是什么必考答题思路核心区别最佳实践。1. 区别git fetch 仅拉取远程更新到本地远程跟踪分支不自动合并安全可控git pull 等价于 git fetch git merge自动合并到当前分支易产生冲突。2. 推荐流程多人协作时先git fetch查看远程更新确认无冲突后手动执行git merge合并避免直接用 git pull。问题14git push 推送失败的常见原因是什么如何解决答题思路2个常见原因解决方案。1. 原因1远程分支有最新更新本地分支未同步导致冲突。解决先git pull拉取远程更新解决冲突后再执行 git push。2. 原因2首次推送分支未关联本地与远程分支。解决执行git push -u origin 分支名关联后后续可直接 git push。问题15常用的 Git 协作模型有哪些各自的适用场景是什么答题思路3种主流模型核心场景。1. GitHub Flow最简单只有 main 常驻分支适合高频发布的 SaaS 产品、创业公司。2. Git Flow双主干maindevelop 临时分支适合有明确版本发布周期的产品如客户端软件。3. Trunk-Based围绕 main 主干开发短生命周期分支依赖 CI/CD 和功能开关适合大规模团队、快速迭代场景。6.4 撤销与高级操作必考题进阶社招高频问题16git reset 的三种模式是什么区别是什么必考答题思路三种模式核心区别结合类比。1. --soft软重置移动 HEAD 指针保留暂存区和工作区修改用于撤销提交后重新提交。2. --mixed默认移动 HEAD 指针重置暂存区保留工作区修改用于撤销提交和暂存重新挑选修改。3. --hard硬重置移动 HEAD 指针重置暂存区、清空工作区彻底回退风险高会丢失未提交修改。问题17git reset 和 git revert 的核心区别是什么适用场景分别是什么必考答题思路核心区别是否修改历史 场景。1. 核心区别git reset 移动 HEAD 指针重写提交历史会丢弃提交git revert 创建新提交抵消目标提交的修改不修改原有历史。2. 适用场景git reset 用于未推送的本地提交git revert 用于已推送的公共提交安全可控不影响团队协作。问题18误执行 git reset --hard 丢了未提交的修改该如何找回答题思路核心命令步骤。用git reflog查看所有 Git 操作记录找到误操作前的操作ID然后执行git reset --hard 操作ID即可恢复丢失的修改git reflog 记录本地所有操作即使提交被丢弃也能追溯。问题19git stash 的作用是什么常用命令有哪些答题思路作用核心命令。1. 作用临时保存工作区和暂存区的修改用于切换分支时不提交修改也不丢失。2. 常用命令git stash保存、git stash list查看、git stash pop恢复并删除、git stash apply恢复并保留、git stash drop删除。问题20git cherry-pick 的作用是什么使用时需要注意什么答题思路作用注意事项。1. 作用将某个分支的指定提交复制应用到当前分支无需合并整个分支如同步单个bug修复提交。2. 注意事项会生成新提交若目标文件有冲突需先解决冲突再提交不建议对已推送的公共分支频繁使用避免历史混乱。七、面试背诵技巧与避坑指南7.1 背诵技巧高效记忆避免遗忘类比记忆法牢记「草稿纸工作区→ 待提交清单暂存区→ 档案柜版本库」「分支可移动指针」「merge分叉汇合」「rebase直线衔接」将抽象概念具象化降低记忆难度。重点聚焦法优先背诵「面试考点」「必背」标注的内容尤其是命令的“作用易错点”面试时直接应答无需额外拓展。场景联想发结合实际开发场景记忆如切换分支前用 stash、公共分支用 merge、本地分支用 rebase既记住命令又理解适用场景避免死记硬背。7.2 面试避坑指南避开高频易错点不丢分避坑1不要混淆「分布式」和「集中式」记住 Git 是分布式每个开发者有完整仓库SVN 是集中式依赖中央服务器。避坑2不要说「git rebase 比 git merge 好」两者无优劣重点说清适用场景公共分支用 merge本地分支用 rebase。避坑3不要滥用 git reset --hard面试时强调“该命令风险高会丢失未提交修改使用前需确认”并补充找回方法git reflog。避坑4不要混淆 git fetch 和 git pull记住“fetch 只下载不合并pull 下载且合并”推荐使用 fetch 更安全。避坑5回答协作模型时不要只说名称简要说明核心特点和适用场景体现实战经验加分项。本篇 Git 面试复习全解析涵盖从基础到进阶的所有高频考点所有内容均按「面试应答」优化可直接背诵。