目录
认识版本控制
为什么需要版本控制?
个人
- 自由回滚:改崩代码、误删时快速恢复历史版本;
- 思路回溯:每步提交时添加注释明确迭代,便于复盘和维护;
- 规范管理:控制提交内容,过滤冗余文件,保持项目结构清晰。
团队
- 避免多人修改同一文件时的覆盖冲突,多人可以协同修改。
版本控制工具具备的功能
- 协同修改:多人同时操作同一项目,互不干扰;
- 数据备份:版本记录相当于代码备份,防止文件丢失;
- 版本管理:记录修改操作,支持任意版本的前进与后退;
- 权限控制:团队场景下可限制不同成员的操作权限;
- 历史记录:查看修改人、修改时间、修改内容,便于追溯;
- 分支管理:隔离开发功能、修复bug,不影响主版本。
版本控制工具对比
| 类型 | 代表工具 | 特点 | 适用场景 |
|---|---|---|---|
| 集中式 | SVN | 依赖中央服务器,单点故障风险 | 团队强管控场景 |
| 分布式 | Git | 本地完整版本库,无需联网操作 | 个人开发、灵活协作 |
Git与代码托管中心
| 维度 | Git | 代码托管中心(如局域网环境下的GitLab、外网场景下的GitHub、Gitee) |
|---|---|---|
| 本质 | 分布式版本控制系统(本地工具) | 基于 Git 协议的远程服务平台(在线服务) |
| 运行环境 | 安装在开发者本地电脑(Windows/macOS/Linux) | 部署在云端服务器(或企业私有服务器) |
| 角色 | 管理本地代码的 "版本记录器 + 分支工具" | 连接多开发者的 "远程仓库 + 协作中枢" |
| 依赖关系 | 可独立运行(无需联网) | 依赖 Git 协议,需配合本地 Git 使用 |
Git本地结构
- 工作区:本地项目文件夹,日常编写、修改文件的直接操作区(就是我们见到的文件目录);
- 暂存区:临时存储待提交修改;
- 本地库:存储所有提交记录的版本仓库;
Git本地库操作命令
首次使用配置
-
本地库初始化
在项目根目录执行,生成隐藏的.git目录,标志本地库创建成功
git init
-
签名设置:用于标识开发人员身份,不需正确,与远程库的账号密码无关联,优先级:项目级别 > 系统用户级别(冲突时以项目级别为准)。
1. 项目级别(仅当前项目生效)
git config user.name "你的用户名" # 如"Lown"
git config user.email "你的邮箱" # 如"Lownn@xxx.com"配置文件路径:项目根目录/.git/config
2. 系统用户级别(所有本地库通用,推荐优先设置)
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"配置文件路径:用户家目录/.gitconfig(Windows:C:\Users\用户名;Mac/Linux:~/.gitconfig)
验证配置是否生效
git config --list # 查看所有生效的Git配置
基本操作
-
查看状态
查看工作区、暂存区的文件状态(新增、修改、删除等)
git status
几个状态:
未跟踪:新创建的文件,未加入版本控制;
已修改未暂存:文件修改后未执行git add;
已暂存未提交:文件已加入暂存区,未执行git commit;
无文件可提交:工作区、暂存区与本地库一致。
-
添加至暂存区
1. 添加文件到暂存区
git add 文件名 # 单个文件(如git add main.py)
git add 文件名1 文件名2 # 多个文件(空格分隔)
git add . # 所有修改文件批量添加(推荐,效率最高)
git add 目录名 # 整个目录的文件(如git add src/)2. 从暂存区移除文件(原文件保留在工作区,仅取消暂存)
git rm --cached 文件名 # 如git rm --cached test.py
-
提交到本地库
1. 提交暂存区文件到本地库(进入vim编辑器写提交说明,按i编辑,:wq保存退出)
git commit 文件名
2. 直接带提交说明(推荐,无需进入vim)
git commit -m "提交说明" # 提交暂存区所有文件
git commit -m "提交说明" 文件名 # 提交指定文件3. 跳过暂存区直接提交(仅修改已提交过的文件时可用)
git commit -a -m "提交说明"
提交说明规范
feat:新增功能(如feat: 新增用户登录接口);
fix:修复 bug(如fix: 修复数据校验失败问题);
docs:文档更新(如docs: 补充接口使用说明);
refactor:代码重构(如refactor: 优化循环逻辑);
style:格式调整(如style: 调整代码缩进)。
-
查看修改差异
git diff # 查看工作区与暂存区所有文件的差异
git diff 文件名 # 查看单个文件的修改细节(如git diff main.py)
git diff --cached 文件名 # 查看暂存区与本地库的差异(需先执行git add)
版本管理
-
查看版本记录
git log # 显示完整版本信息(哈希值、作者、时间、提交说明)
git log --pretty=oneline # 一行显示(完整哈希值+提交说明)
git log --oneline # 精简显示(哈希值前7位+提交说明),仅显示当前版本及之前记录
git reflog # 显示所有版本(包括已回滚的版本),标注回到当前版本需几步(HEAD@{n})
多屏查看控制:空格 = 向下翻页、b = 向上翻页、q = 退出查看。
- 版本切换方法
| 切换方式 | 命令示例 | 适用场景 |
|---|---|---|
| 基于哈希值(推荐) | git reset --hard 哈希值(如 git reset --hard a3f2e1d) | 任意版本前进 / 后退(精准) |
| 基于 ^ 符号 | git reset --hard HEAD^(一个 ^ 退 1 步) | 仅后退,步数少(≤3 步) |
| 基于~符号 | git reset --hard HEAD~3(退 3 步) | 仅后退,步数较多 |
注意:git reset --hard会直接覆盖工作区、暂存区和本地库,执行前建议用git reflog记录当前版本哈希值,防止回滚后想恢复却找不到索引。
文件找回
-
删除文件前已提交到本地库(执行了git commit)
git reset --hard 删除前的版本哈希值(通过git reflog查找目标版本)
-
删除文件后加入暂存区但未提交(执行了git add)
git reset --hard HEAD(刷新工作区,恢复文件)
仅当文件 "已提交到本地库" 时,Git 能 100% 找回;
若文件未add也未commit,误删后 Git 无法恢复,需依赖系统回收站或文件恢复工具。
.gitignore配置
作用:.gitignore 是一个 "黑名单文件",把不需要 Git 跟踪(即不纳入版本控制)的文件 / 目录写进去,Git 就会自动忽略它们:不会显示在 git status 的 "未跟踪文件" 里;不会被 git add 命令添加到暂存区;不会被提交到本地库,也不会出现在版本记录里。
-
在项目根目录新建文件,命名为.gitignore(Windows 需注意:新建文本文件后,重命名时删除 ".txt" 后缀,确保文件名仅为.gitignore);
-
复制通用配置模板(根据开发语言调整):
操作系统临时文件
.DS_Store
Thumbs.db编译产物
*.class
dist/
build/
target/依赖包目录
node_modules/
venv/
env/
lib/
lib64/缓存文件
pycache/
*.pyc
*.pyo
*.log
*.swp
*.swoIDE配置文件
.idea/
.vscode/
*.suo
.ntvs
*.njsproj
*.sln
*.db大文件(根据需求添加)
*.csv
*.zip
*.rar
*.iso -
生效验证
配置后执行,确认被忽略文件不显示"未跟踪"或"已修改"
git status
若已执行git add将忽略文件加入暂存区,需先移除再生效
git rm --cached 被忽略的文件名 # 如git rm --cached node_modules/
注意事项
- 提交频率:每完成一个独立功能(如 "完成登录逻辑")或修复一个 bug,就提交一次,避免大量修改一次性提交(回滚时难以定位);
- 提交说明:务必清晰描述修改内容,拒绝 "修改代码""fix bug" 等模糊表述;
- 谨慎操作:git reset --hard和git checkout -- 文件名会直接覆盖文件,执行前确认无需保留当前修改;
- 配置备份:系统级签名配置仅需设置一次,后续所有本地库通用;若需区分不同项目身份,再设置项目级签名。
