git常见面试题

7次阅读
没有评论

 

Git 面试题通常分为 基础操作核心原理(最能拉开差距)和 工作流冲突解决。作为一名资深 Java 开发,面试官往往会通过 Git 考察你的团队协作能力和对版本控制的深度理解。


1. 核心原理:Git 的底层是怎么存数据的?

面试官: “Git 和 SVN 的区别是什么?Git 是怎么存储文件的?”

  • 回答重点:

    • SVN 是增量式: 只存储文件差异(Delta)。

    • Git 是快照式: Git 存储的是文件的完整快照。如果文件没变,它只存一个指向之前文件的指针。

    • 三个区域: 工作区(Working Directory)、暂存区(Index/Stage)、版本库(Repository)。

    • 核心对象: blob(存文件内容)、tree(存目录结构)、commit(存提交信息)。


2. 常用命令:reset vs revert

面试官: “如果你提交错了代码,想撤回,用哪个?有什么区别?”

  • git reset (回退):

    • 直接移动 HEAD 指针。

    • --soft:只回退 commit,代码还在暂存区。

    • --hard危险! 彻底回退到某个版本,本地修改会丢失。

    • 适用: 自己私有的分支,清理提交历史。

  • git revert (反做):

    • 新建一个 commit,用来抵消之前的修改。

    • 适用: 公共分支(如 master/develop)。因为它不会破坏提交历史,对协作更友好。


3. 进阶对比:merge vs rebase

面试官: “团队协作时,你倾向于用 merge 还是 rebase?”

  • git merge

    • 优点: 记录真实的提交时间线,不会改变历史。

    • 缺点: 频繁合共会导致分支线图(Graph)变得像“麻花”一样乱。

  • git rebase (变基):

    • 优点: 让提交历史变成一条直线,非常整洁。

    • 缺点: 改变了历史。如果 rebase 了已经推送到远程的分支,会导致其他队友的代码冲突。

  • 最佳实践: “在自己的本地开发分支 rebase 主干代码,保持简洁;合并回主分支时用 merge。”


4. 场景题:代码写一半,需要紧急修 Bug 怎么办?

面试官: “你正在开发功能,突然有个线上紧急 Bug 要去另一个分支修,但现在的代码还没写完不想 commit。”

  • 回答: 使用 git stash

    1. git stash:把当前工作区修改存入栈中。

    2. 切换分支修 Bug,提交,合回。

    3. git checkout dev 回到原分支。

    4. git stash pop:取出之前的代码继续干活。


5. 灾难恢复:删掉的 commit 还能找回来吗?

面试官: “我不小心执行了 git reset --hard,还没 push,代码是不是彻底没了?”

  • 回答: 不一定,只要本地 objects 还没被 GC 回收,可以用 git reflog

    • reflog 记录了你在本地所有的操作记录(包括切换分支、reset 等)。

    • 找到丢失 commit 的哈希值,再执行 git reset --hard <hash> 即可找回。


6. 连环炮:什么是“冲突”?怎么解决?

  • 原因: 两个提交修改了同一个文件的同一行。

  • 解决: 1. Git 会在文件里标注 <<<< HEAD>>>> hash

    2. 手动决定保留哪份代码(或者两份都留)。

    3. git add 标记冲突已解决。

    4. git commit 完成合并。


给你的面试小贴士:

如果你面试的是 Senior Java 岗位,面试官可能还会顺带问一句 Git Flow(如 Master, Develop, Feature, Hotfix 分支管理规范)。建议结合你前年做项目时的团队规范讲,会显得你非常有实战经验。

你现在的团队是用简单的 main/dev 模式,还是完整的 Git Flow

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-04-08发表,共计1407字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)