
一、 Git 四大核心区域
这张图里包含了 Git 最关键的四个存储区域,它们是 Git 版本控制的基础:
-
工作区(Working Directory) 就是你电脑里实际写代码的文件夹,比如图里的
main.c文件就存放在这里。你日常的编辑、新增、删除文件,都是在这个区域完成的。 -
暂存区(Staging Area / Index) 可以理解为一个 "待提交清单",用来暂时存放你准备提交的修改。当你执行
git add main.c时,就是把工作区里的main.c改动添加到暂存区。 -
本地仓库(Local Repository) 这是 Git 在你本地创建的版本数据库,所有提交的代码都会在这里生成一个历史版本记录。执行
git commit命令,会把暂存区的内容正式提交到本地仓库。 -
远程仓库(Remote Repository) 托管在服务器上的仓库,比如图里的 Gitee(码云),也可以是 GitHub、GitLab。执行
git push命令,会把本地仓库的提交推送到远程仓库,方便团队协作和代码备份。
2. 代码流转完整流程(面试必背)
结合这张图,一个标准的 Git 操作流程是:
- 在工作区写代码 :比如创建 / 修改
main.c。 - 添加到暂存区 :
git add main.c→ 把改动放入待提交清单。 - 提交到本地仓库 :
git commit -m "完成main.c开发"→ 生成一个本地版本。 - 推送到远程仓库 :
git push origin main→ 把本地版本同步到 Gitee 服务器。
二、基础流程:本地仓库初始化与版本迭代
1. 环境准备(面试必知)
# 配置用户信息(必须,否则无法提交)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 查看配置(验证是否生效)
git config --list
- 面试考点 :
--global表示全局配置,所有仓库共用;不加则仅当前仓库生效。
2. 初始化仓库 & 首次提交
# 1. 创建并进入项目目录
mkdir myproject && cd myproject
# 2. 初始化本地仓库(生成.git目录)
git init
# 3. 创建/编辑代码文件
vi main.c
# 4. 将文件添加到暂存区(工作区→暂存区)
git add main.c # 单个文件
# git add . # 所有改动文件(常用)
# 5. 提交到本地仓库(暂存区→本地仓库)
git commit -m "feat: 初始化main.c,实现基础功能"
# -m 后是提交说明,建议遵循规范(feat/fix/docs等前缀)
- 提交说明规范 (面试加分):
feat:新增功能;fix:修复 bug;docs:文档修改;style:格式调整;refactor:重构。
3. 版本迭代(修改 - 暂存 - 提交)
# 1. 修改代码
vi main.c
# 2. 查看当前状态(关键!面试常考)
git status # 显示改动在工作区/暂存区,是否未跟踪
# 3. 暂存改动
git add main.c
# 4. 提交新版本
git commit -m "fix: 修复main.c中计算逻辑错误"
# 5. 查看版本历史(面试高频)
git log # 完整日志
git log --oneline # 简洁日志(推荐)
git log -3 # 只看最近3条
- git log 关键信息 :提交 ID(哈希值)、作者、日期、提交说明,
HEAD -> master表示当前分支最新版本。
三、分支管理(面试核心考点)
1. 分支基础操作
# 1. 查看分支
git branch # 列出本地分支,* 表示当前分支
git branch -r # 查看远程分支
git branch -a # 查看所有分支(本地+远程)
# 2. 创建分支(开发新功能/修复bug专用)
git branch dev # 创建dev分支
git checkout dev # 切换到dev分支
# 简写:创建并切换分支(常用)
git checkout -b dev
# 3. 在dev分支开发并提交
vi main.c
git add .
git commit -m "feat: 在dev分支新增add方法"
# 4. 合并分支(dev开发完成,合并到主分支master)
git checkout master # 先切回主分支
git merge dev # 合并dev到master
# 5. 删除分支(合并后清理)
git branch -d dev # 删除本地分支
git push origin --delete dev # 删除远程分支
2. 分支策略(面试必答)
- master/main:主分支,存放稳定可发布的代码,禁止直接修改。
- dev/develop:开发分支,团队协作的核心分支,功能开发完成后合并到主分支。
- feature/xxx :功能分支,从 dev 创建,开发完合并回 dev,如
feature/login。 - bugfix/xxx:bug 修复分支,从 master 创建,修复后合并回 master 和 dev。
3. 冲突解决(面试高频)
当合并分支时多个分支修改了同一行代码,会触发冲突:
# 1. 合并时提示冲突,先查看冲突文件
git status # 标记为both modified的文件是冲突文件
# 2. 编辑冲突文件,手动解决冲突
# 冲突标记:<<<<<<< HEAD(当前分支代码)、=======(待合并分支代码)、>>>>>>> dev
vi main.c # 删除冲突标记,保留正确代码
# 3. 解决后重新提交
git add .
git commit -m "fix: 解决dev合并到master的代码冲突"
四、远程协作:本地 ↔ 远程仓库
1. 关联远程仓库
# 1. 方式1:本地仓库关联已有远程仓库
git remote add origin https://gitee.com/你的账号/myproject.git
# 2. 方式2:克隆远程仓库到本地(常用,无需init)
git clone https://gitee.com/你的账号/myproject.git
cd myproject
- 面试考点 :
origin是远程仓库的默认别名,可自定义。
2. 本地 ↔ 远程同步
# 1. 推送到远程仓库
git push -u origin master # 首次推送,-u 绑定本地master到远程master
git push # 后续推送(已绑定)
# 2. 拉取远程最新代码(协作必备)
git pull origin master # 拉取并合并远程master到本地
# 分步操作(面试常问区别):
git fetch origin master # 仅拉取远程代码,不合并
git merge origin/master # 手动合并到本地
# 3. 查看远程仓库信息
git remote -v
3. 标签管理(发布版本用,面试加分)
# 1. 创建标签(标记发布版本)
git tag v1.0.0 # 基于最新提交创建标签
git tag v1.0.0 提交ID # 基于指定提交创建标签
# 2. 推送标签到远程
git push origin v1.0.0
git push origin --tags # 推送所有标签
# 3. 查看标签
git tag
git show v1.0.0 # 查看标签详情
五、高频场景 & 面试避坑点
1. 撤销操作(面试必考)
# 1. 撤销工作区改动(未add)
git checkout -- main.c # 恢复到最近一次提交的状态
# 2. 撤销暂存区改动(已add,未commit)
git reset HEAD main.c # 暂存区→工作区
# 3. 撤销本地提交(已commit,未push)
git reset --hard HEAD^ # 撤销上一次提交(慎用,会丢失改动)
git reset --hard 提交ID # 回滚到指定版本
# 4. 撤销远程提交(已push,面试慎答)
git revert 提交ID # 创建新提交,撤销指定版本的改动(推荐,不破坏历史)
2. 面试高频问答
| 问题 | 标准答案 |
|---|---|
| git add 和 git commit 的区别? | git add 把工作区改动放到暂存区;git commit 把暂存区内容提交到本地仓库,生成版本记录。 |
| git pull 和 git fetch 的区别? | git pull = git fetch + git merge,拉取并自动合并;git fetch 仅拉取远程代码,手动合并更安全。 |
| 分支合并时冲突的原因?如何解决? | 多个分支修改了同一文件的同一行代码;先手动编辑冲突文件删除冲突标记,保留正确代码,再 add+commit。 |
| 为什么不直接在 master 分支开发? | master 分支存放稳定代码,直接修改易引入 bug;通过功能分支开发,测试稳定后再合并,保证主分支安全。 |
| git reset 和 git revert 的区别? | git reset 回滚版本,会删除历史提交(本地可用);git revert 创建新提交撤销改动,保留历史(远程推荐)。 |
六、核心流程总结(面试速记)
- 本地开发 :
git init→ 写代码 →git add→git commit→git log; - 分支管理 :
git checkout -b 分支名→ 开发 →git checkout master→git merge 分支名; - 远程协作 :
git remote add origin 地址→git push/git pull; - 高频操作 :
git status(查状态)、git log(查历史)、git reset(撤销)、解决冲突。