Git 相关的常见面试题及参考答案
Git 相关的常见面试题及参考答案,适用于 C++ 工程师岗位的准备:
git常用命令如下:
clone
checkout
add
commit
rebase
stash
10.0.1. Git 的工作流程是怎样的?
Git 的核心流程包括三个区域:
- 工作区(Working Directory):当前正在编辑的文件。
- 暂存区(Staging Area / Index):通过
git add
添加修改。 - 本地仓库(Local Repository):通过
git commit
提交更改。
此外还有远程仓库(Remote Repository),通过 git push
和 git pull
进行同步。
10.0.2. 如何初始化一个 Git 仓库?
git init # 初始化本地仓库
git clone <url> # 克隆远程仓库到本地
10.0.3. 如何查看 Git 提交历史?
git log # 查看完整提交历史
git log --oneline # 单行简洁显示
git log --graph # 显示分支合并图
10.0.4. 如何将文件添加到暂存区?如何提交更改?
git add <file> # 添加指定文件到暂存区
git add . # 添加所有修改到暂存区git commit -m "描述" # 提交更改并添加提交信息
10.0.5. 如何撤销某个已提交的更改?
-
撤销最近一次提交(保留修改)
git reset --soft HEAD~1
-
撤销提交并删除修改
git reset --hard HEAD~1
-
创建一个新的提交来撤销某次提交
git revert <commit-hash>
10.0.6. 如何解决 Git 冲突?
冲突通常发生在多人修改同一段代码并执行 git merge
或 git pull
时。
解决步骤如下:
- 打开冲突文件,找到冲突标记
<<<<<<<
,=======
,>>>>>>>
。 - 手动选择保留哪些修改。
- 删除冲突标记。
- 标记冲突已解决:
git add <resolved-file>
- 提交合并结果:
git commit
10.0.7. Git 中的分支有哪些类型?如何创建和切换分支?
- 主分支(main/master)
- 开发分支(develop)
- 功能分支(feature/*)
- 修复分支(hotfix/*)
- 发布分支(release/*)
git branch feature-1 # 创建新分支
git checkout feature-1 # 切换分支
git checkout -b feature-2 # 创建并切换分支
10.0.8. 如何合并两个分支?
git checkout main
git merge feature-1
- 如果发生冲突,按上述方式手动解决。
- 可使用
git diff
查看差异。
10.0.9. 如何查看当前状态(未提交的修改)?
git status
该命令会显示:
- 修改但未提交的文件
- 已添加但未提交的内容
- 未被追踪的新文件
10.0.10. 如何查看具体文件的修改内容?
git diff # 查看未暂存的修改
git diff --cached # 查看已暂存但未提交的修改
git diff <commit1> <commit2> # 查看两次提交之间的差异
10.0.11. 如何推送本地分支到远程仓库?
git push origin feature-1
首次推送时可设置上游分支:
git push -u origin feature-1
之后可以直接使用:
git push
10.0.12. 如何从远程拉取最新代码?
git fetch origin # 获取远程更新(不自动合并)
git pull origin main # 获取并自动合并远程分支
fetch + merge
是更安全的方式,避免直接覆盖本地修改。
10.0.13. Git rebase 和 merge 的区别?
特性 | merge | rebase |
---|---|---|
合并方式 | 合并两个历史记录,生成新的提交 | 将一个分支的改动移到另一个分支上重新应用 |
历史记录 | 复杂,包含合并提交 | 平直、清晰 |
是否改变历史 | 否 | 是(慎用于公共分支) |
使用场景 | 多人协作的分支 | 本地分支整理提交历史 |
10.0.14. 如何查看远程仓库信息?
git remote -v
可以查看远程仓库名称(如 origin
)及其 URL。
10.0.15. 如何删除本地或远程分支?
git branch -d feature-1 # 删除本地分支
git branch -D feature-1 # 强制删除未合并的分支git push origin --delete feature-1 # 删除远程分支
10.0.16. 如何忽略某些文件(如编译中间文件)?
在项目根目录下创建 .gitignore
文件,并添加需要忽略的文件/目录模式:
# 忽略 build 目录
/build/
# 忽略临时文件
*.tmp
# 忽略 IDE 配置文件
.idea/
.vscode/
10.0.17. Git stash 的作用是什么?如何使用?
git stash
用于临时保存当前工作区的修改,以便切换分支或拉取代码。
常用命令:
git stash save "描述" # 保存当前修改
git stash list # 查看保存的修改列表
git stash apply # 应用最近一次保存的修改
git stash drop # 删除最近一次保存的修改
10.0.18. 如何查看某个文件的历史修改记录?
git blame <filename>
显示每一行是谁在哪次提交中修改的。
10.0.19. Git tag 的作用是什么?如何打标签?
tag 用于标记特定版本(如 v1.0.0)。
git tag v1.0.0 # 创建轻量标签
git tag -a v1.0.0 -m "release" # 创建带注释的标签git push origin v1.0.0 # 推送标签到远程
git push origin --tags # 推送所有标签
10.0.20. Git 是什么?它与 SVN 的主要区别是什么?
- Git 是一个分布式版本控制系统(DVCS),用于跟踪文件变更、协同开发。
- SVN(Subversion)是一个集中式版本控制系统(CVCS)。
特性 | Git | SVN |
---|---|---|
架构 | 分布式 | 集中式 |
性能 | 更快(本地提交) | 较慢(每次提交需联网) |
分支管理 | 强大灵活(轻量级分支) | 复杂且笨重 |
数据完整性 | 使用 SHA-1 哈希校验 | 没有内置校验机制 |
离线操作 | 支持 | 不支持 |
以上内容涵盖了 Git 的基础概念、常用命令、分支管理、冲突解决等核心知识点,适用于 C++ 工程师岗位的面试准备。掌握这些内容有助于在实际开发中高效地进行版本控制与团队协作。