Git 面试题
2026/1/16大约 2 分钟
Git 面试题
基础概念
1. Git 和 SVN 的区别?
| 特性 | Git | SVN |
|---|---|---|
| 类型 | 分布式 | 集中式 |
| 离线工作 | 支持 | 不支持 |
| 分支 | 轻量级 | 重量级 |
| 速度 | 快 | 慢 |
2. Git 的工作区域?
- 工作区:本地文件目录
- 暂存区:git add 后的区域
- 本地仓库:git commit 后的区域
- 远程仓库:git push 后的区域
3. git fetch 和 git pull 的区别?
- fetch:只获取远程更新,不合并
- pull:获取远程更新并合并(fetch + merge)
4. git merge 和 git rebase 的区别?
| 特性 | merge | rebase |
|---|---|---|
| 历史 | 保留分支历史 | 线性历史 |
| 冲突 | 一次解决 | 可能多次 |
| 适用 | 公共分支 | 个人分支 |
原则:不要在公共分支上 rebase
5. git reset 和 git revert 的区别?
- reset:回退到某个版本,删除之后的提交
- revert:撤销某次提交,生成新的提交
# reset(会改变历史)
git reset --hard HEAD^
# revert(不改变历史)
git revert <commit>6. git reset 的三种模式?
| 模式 | 工作区 | 暂存区 | 仓库 |
|---|---|---|---|
| --soft | 保留 | 保留 | 回退 |
| --mixed | 保留 | 回退 | 回退 |
| --hard | 回退 | 回退 | 回退 |
实际操作
7. 如何撤销已经 push 的提交?
# 方法1:revert(推荐)
git revert <commit>
git push
# 方法2:reset + force push(慎用)
git reset --hard <commit>
git push --force8. 如何合并多个提交?
# 交互式 rebase
git rebase -i HEAD~3
# 将 pick 改为 squash
pick abc1234 First commit
squash def5678 Second commit
squash ghi9012 Third commit9. 如何修改最后一次提交?
# 修改提交信息
git commit --amend -m "new message"
# 添加遗漏的文件
git add forgotten_file
git commit --amend --no-edit10. 如何找回删除的分支?
# 查看操作日志
git reflog
# 恢复分支
git checkout -b <branch> <commit>11. 如何解决冲突?
# 1. 查看冲突文件
git status
# 2. 编辑冲突文件
<<<<<<< HEAD
当前分支内容
=======
合并分支内容
>>>>>>> feature
# 3. 标记解决
git add <file>
# 4. 完成合并
git commit12. 如何暂存当前工作?
# 暂存
git stash
# 查看
git stash list
# 恢复
git stash pop13. 如何查看某行代码是谁写的?
git blame <file>14. 如何找到引入 bug 的提交?
git bisect start
git bisect bad # 当前有 bug
git bisect good <commit> # 这个版本没问题
# 二分查找,测试后标记 good/bad
git bisect reset15. .gitignore 不生效怎么办?
# 清除缓存
git rm -r --cached .
git add .
git commit -m "Update .gitignore"工作流
16. 常见的 Git 工作流?
- Git Flow:main + develop + feature/release/hotfix
- GitHub Flow:main + feature,通过 PR 合并
- GitLab Flow:基于环境的分支
17. 如何规范提交信息?
<type>(<scope>): <subject>
<body>
<footer>type:feat、fix、docs、style、refactor、test、chore
feat(user): add login function
fix(order): fix payment bug
docs: update README18. 如何保护主分支?
- 禁止直接 push
- 必须通过 PR 合并
- 要求 Code Review
- 要求 CI 通过