一、单项选择题
- `git add` 命令的作用是将文件修改提交到哪里?
A. 远程仓库
B. 本地仓库
C. 暂存区
D. 工作区
答案:C
解析:`git add` 是将工作区的修改存入暂存区,是提交前的临时缓存步骤。
- 新建一个分支并立刻切换到该分支,正确的命令是?
A. `git branch dev`
B. `git checkout -b dev`
C. `git switch dev`
D. `git merge dev`
答案:B
解析:`-b` 参数表示新建并切换;A 只创建不切换;C 只切换不新建;D 是合并分支。
- 文件只在工作区修改了,还没执行 `git add`,想撤销修改恢复原样,用哪个命令?
A. `git reset --hard`
B. `git restore 文件名`
C. `git revert`
D. `git stash`
答案:B
解析:`git restore` 用于丢弃工作区修改,一键还原文件到上次提交状态。
- `git pull` 等价于以下哪一组操作?
A. `git fetch + git merge`
B. `git fetch + git rebase`
C. `git add + git commit`
D. `git clone + git merge`
答案:A
解析:`git pull` 本质是先执行 `git fetch` 拉取远程内容,再自动执行 `git merge` 合并到当前分支。
- 要删除一个已经合并完成的本地分支,正确且安全的命令是?
A. `git branch -D dev`
B. `git branch -d dev`
C. `git delete dev`
D. `git rm dev`
答案:B
解析:`-d` 是安全删除,只删已合并的分支;`-D` 是强制删除,未合并也会删。
二、判断题
- `git commit` 会把代码直接提交到远程仓库。( )
答案:×
解析:`git commit` 只提交到本地仓库,推送到远程需要 `git push`。
- 执行 `git merge` 会生成一个新的合并提交,保留完整的分支提交历史。( )
答案:√
解析:merge 的特点就是不修改原有历史,生成新的合并节点,保留完整分支轨迹。
- 已经被 Git 跟踪的文件,写入 `.gitignore` 后会自动取消跟踪。( )
答案:×
解析:`.gitignore` 只对未跟踪的文件生效;已跟踪的需要先执行 `git rm --cached 文件名` 取消跟踪。
- `git stash` 会永久删除当前未提交的代码,无法恢复。( )
答案:×
解析:`git stash` 是临时暂存,用 `git stash pop` 可以完整恢复。
- 为了让提交历史更整洁,推荐在公共主分支上使用 `git rebase`。( )
答案:×
解析:公共分支禁止用 rebase,会改写历史导致同事代码冲突;公共分支统一用 merge。
三、简答题
- 请简单描述 Git 中工作区、暂存区、本地仓库、远程仓库的关系。
答案要点:
-
工作区:本地写代码的文件夹
-
`git add` → 暂存区:临时缓存待提交内容
-
`git commit` → 本地仓库:生成永久版本记录
-
`git push` → 远程仓库:云端备份、多人协作共享
- `git fetch` 和 `git pull` 有什么区别?
答案要点:
-
`git fetch`:只下载远程更新,不自动合并,更安全
-
`git pull`:下载 + 自动合并,等价于 `git fetch + git merge`
- `git merge` 和 `git rebase` 有什么核心区别?分别适合什么场景?
答案要点:
-
merge:生成新合并提交,保留完整历史,适合公共分支合并
-
rebase:提交历史变直线,改写原有历史,适合个人私有分支整理
-
原则:公共分支用 merge,个人分支用 rebase
- `.gitignore` 文件的作用是什么?如果配置的规则失效了怎么办?
答案要点:
-
作用:指定不需要 Git 跟踪的文件(如依赖包、本地配置)
-
失效原因:文件已被跟踪
-
解决:`git rm --cached 文件名` 取消跟踪后重新提交
- `git reset` 和 `git revert` 都可以回退代码,核心区别是什么?
答案要点:
-
reset:直接回到某个版本,改写历史,适合本地未推送的提交
-
revert:生成反向新提交抵消修改,不改动原有历史,适合已推送的公共分支
四、场景实操题
- 你正在自己的分支写新功能,代码写了一半还没提交,突然接到紧急需求要去主分支改 bug,你该怎么操作?
答案步骤:
① `git stash` 暂存当前未完成的代码
② 切换到主分支修复 bug,提交并推送
③ 切回自己的分支,`git stash pop` 恢复代码继续开发
- 执行合并代码后出现了冲突,完整的处理流程是什么?
答案步骤:
① `git status` 找到冲突文件
② 打开文件,根据 `<<<<<<<` `=======` `>>>>>>>` 标记手动修改代码
③ 修改完成后 `git add 冲突文件`
④ `git commit` 完成合并
- 刚执行完 `git commit`,突然发现提交说明写错了,代码还没推送到远程,怎么修改?
答案:
执行 `git commit --amend -m "新的正确说明"`,直接修改最近一次提交记录,不会生成新提交。
- 不小心把错误代码推送到了远程公共主分支,怎么撤回才不会影响其他同事?
答案要点:
不能用 `git reset`(会改写公共历史),必须用 `git revert`:
① 找到要撤回的提交 ID
② 执行 `git revert 提交ID`,生成一个反向抵消的新提交
③ `git push` 推送到远程,原有历史保持不变,不影响他人