git工具简介

一、 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 操作流程是:

  1. 在工作区写代码 :比如创建 / 修改 main.c
  2. 添加到暂存区git add main.c → 把改动放入待提交清单。
  3. 提交到本地仓库git commit -m "完成main.c开发" → 生成一个本地版本。
  4. 推送到远程仓库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 创建新提交撤销改动,保留历史(远程推荐)。

六、核心流程总结(面试速记)

  1. 本地开发git init → 写代码 → git addgit commitgit log
  2. 分支管理git checkout -b 分支名 → 开发 → git checkout mastergit merge 分支名
  3. 远程协作git remote add origin 地址git push / git pull
  4. 高频操作git status(查状态)、git log(查历史)、git reset(撤销)、解决冲突。
相关推荐
呆萌的代Ma3 小时前
Git不强行推送,撤销最近几次的提交
git
透明的玻璃杯5 小时前
git应用
git
炸炸鱼.7 小时前
Git+Jenkins实战(一):从零搭建自动化发布与回滚系统(附完整代码)
git·jenkins
言6669 小时前
要忽略前端依赖包node_modules的文件在目录下 git暂存区消失
git
胡小禾10 小时前
Git Worktree
git
程序员小羊!10 小时前
18 GIt
git
怣疯knight10 小时前
Git 本地分支关联远程分支 常用命令汇总
git
ANNENBERG11 小时前
git分支开发管理
git
坤坤藤椒牛肉面11 小时前
GIT的使用
git
w32963627111 小时前
使用 OpenCode 在 Windows 上加速安装 Playwright 的完整指南
windows·git