一、Git 核心概念与基础配置
1. 核心概念表
| 术语 |
定义 |
位置 |
| 工作区(WD) |
本地可见的文件目录,日常编辑的文件存放处 |
项目根目录(非 .git 内) |
| 暂存区(SA) |
临时存储待提交的修改,可精确选择提交内容 |
.git/index |
| 版本库(Repo) |
存储所有提交历史的数据库,每个提交是不可修改的快照 |
.git 目录内 |
| 远程仓库 |
托管在服务器的仓库(如 GitHub),用于多人协作同步代码 |
远程服务器(如 GitHub) |
| 分支(Branch) |
独立的开发线,可并行开发不同功能,默认主分支为 main 或 master |
版本库内 |
2. 安装与初始化配置
-
安装验证:
复制代码
git --version # 输出版本号表示安装成功,如 git version 2.45.1
-
全局配置(必做):
复制代码
# 设置提交者信息(会显示在所有提交记录中)
git config --global user.name "Your Full Name"
git config --global user.email "your.email@example.com"
# 配置默认编辑器(避免使用 Vim 时操作困难)
git config --global core.editor "code --wait" # VS Code(需配置环境变量)
git config --global core.editor "notepad.exe" # Windows 记事本
# 查看配置
git config --global --list # 列出所有全局配置
-
初始化仓库:
| 场景 |
命令 |
说明 |
| 本地新建仓库 |
git init |
在当前目录生成 .git 文件夹 |
| 克隆远程仓库 |
git clone <远程地址> |
从远程下载完整仓库(含历史记录) |
| 克隆指定分支 |
git clone -b <分支名> <远程地址> |
仅克隆远程指定分支(节省时间) |
二、工作区与暂存区操作
1. 文件状态表
| 状态符号 |
含义(通过 git status -s 查看) |
说明 |
?? |
未跟踪(Untracked) |
新文件,未执行 git add |
A |
已暂存(Staged) |
已执行 git add,待提交 |
M(红色) |
已修改(Modified) |
已跟踪文件被修改,未暂存 |
M(绿色) |
已修改且暂存(Modified+Staged) |
已执行 git add,修改后再次修改 |
D |
已删除(Deleted) |
已跟踪文件被删除,未暂存或已暂存 |
2. 核心操作命令
| 操作目标 |
命令 |
示例 |
| 查看文件状态 |
git status |
git status(详细)/ git status -s(精简) |
| 查看具体修改内容 |
git diff <文件名> |
git diff index.html(工作区 vs 暂存区) |
| 查看暂存区与版本库差异 |
git diff --cached <文件名> |
git diff --cached style.css |
| 添加单个文件到暂存区 |
git add <文件名> |
git add app.js |
| 添加目录到暂存区 |
git add <目录名>/ |
git add src/ |
| 添加所有新增 / 修改文件 |
git add . |
不包括已删除文件 |
| 添加修改 / 删除文件 |
git add -u |
不包括新增文件 |
| 撤销工作区修改 |
git checkout -- <文件名> |
git checkout -- app.js(恢复到最近版本) |
| 撤销暂存区修改(放回工作区) |
git reset HEAD <文件名> |
git reset HEAD app.js |
三、版本库提交与历史查看
1. 提交操作
| 操作 |
命令 |
说明 |
| 提交暂存区到版本库 |
git commit -m "提交说明" |
提交说明需简洁清晰(如 fix: 修复登录bug) |
| 提交时修改说明 |
git commit --amend |
修改最近一次提交的说明(未推送到远程时使用) |
| 跳过暂存区直接提交 |
git commit -am "提交说明" |
仅适用于已跟踪文件的修改 / 删除 |
2. 查看提交历史
| 需求 |
命令 |
说明 |
| 查看完整历史 |
git log |
按时间倒序,含哈希值、作者、时间、说明 |
| 精简历史(一行一条) |
git log --oneline |
显示哈希值前 7 位 + 提交说明 |
| 查看最近 n 条历史 |
git log -n <数字> |
git log -n 3(最近 3 条) |
| 查看文件修改历史 |
git log -p <文件名> |
git log -p app.js(含具体修改内容) |
| 图形化显示分支历史 |
git log --graph --oneline |
用 * 显示分支合并关系 |
| 查看所有操作记录(含删除的提交) |
git reflog |
用于找回误删的提交 |
四、版本回退与撤销(核心风险操作)
1. git reset 三种模式对比表
| 模式 |
版本库(HEAD) |
暂存区(Index) |
工作区(WD) |
适用场景 |
风险级别 |
--soft |
修改 |
不变 |
不变 |
撤销提交,保留暂存区修改(重新提交) |
低 |
--mixed |
修改 |
修改 |
不变 |
撤销提交和暂存,保留工作区修改(常用) |
中 |
--hard |
修改 |
修改 |
修改 |
彻底回退到历史版本(丢弃所有未提交修改) |
高 |
2. 回退命令示例
复制代码
# 回退到上一版本(HEAD^ 等价于 HEAD~1)
git reset --mixed HEAD^ # 保留工作区,常用
git reset --hard HEAD~3 # 回退到前3个版本(慎用,会丢失修改)
# 通过哈希值回退(从 git log 或 git reflog 获取哈希)
git reset --hard a3f2d1c # 回退到哈希为 a3f2d1c 的版本
五、分支管理(多人协作核心)
1. 分支命名规范
| 分支类型 |
命名示例 |
用途 |
| 主分支 |
main / master |
存放稳定代码,用于发布 |
| 开发分支 |
develop |
团队日常开发的集成分支 |
| 功能分支 |
feature/user-login |
开发新功能,完成后合并到 develop |
| 修复分支 |
hotfix/payment-bug |
紧急修复线上问题,合并到 main 和 develop |
| 发布分支 |
release/v1.0 |
版本发布前的准备(如改版本号) |
2. 分支操作命令表
| 操作 |
命令 |
示例 |
| 查看本地分支 |
git branch |
* main 表示当前在 main 分支 |
| 查看远程分支 |
git branch -r |
显示 origin/main 等远程分支 |
| 查看所有分支(本地 + 远程) |
git branch -a |
远程分支以红色显示 |
| 创建分支(不切换) |
git branch <分支名> |
git branch feature/cart |
| 创建并切换分支 |
git checkout -b <分支名> |
git checkout -b hotfix/login |
| 切换分支(Git 2.23+) |
git switch <分支名> |
git switch develop |
| 合并分支(目标分支:当前分支) |
git merge <源分支名> |
git checkout main; git merge feature/pay |
| 删除本地已合并分支 |
git branch -d <分支名> |
git branch -d feature/cart |
| 强制删除未合并分支 |
git branch -D <分支名> |
git branch -D feature/old(慎用) |
3. 解决合并冲突
当两个分支修改同一文件的同一行时,会产生冲突,文件中会出现标记:
复制代码
<<<<<<< HEAD(当前分支内容)
hello world
=======
hello git
>>>>>>> feature/change(源分支内容)
解决步骤:
- 打开冲突文件,删除冲突标记(
<<<<<<<、=======、>>>>>>>),保留需要的内容。
- 执行
git add <冲突文件> 标记为已解决。
- 执行
git commit 完成合并(无需 -m,自动生成合并说明)。
六、远程仓库交互
1. 远程仓库操作命令表
| 操作 |
命令 |
示例 |
| 关联远程仓库 |
git remote add <别名> <远程地址> |
git remote add origin https://github.com/xxx/repo.git |
| 查看远程仓库信息 |
git remote -v |
显示 fetch(拉取)和 push(推送)地址 |
| 拉取远程分支并合并 |
git pull <远程别名> <远程分支> |
git pull origin main |
| 首次推送分支(关联上游) |
git push -u <远程别名> <本地分支> |
git push -u origin feature/login(后续可直接 git push) |
| 推送本地分支到远程 |
git push <远程别名> <本地分支> |
git push origin develop |
| 删除远程分支 |
git push <远程别名> --delete <远程分支> |
git push origin --delete feature/old |
七、进阶功能:Stash 与 Tag
1. 暂存工作区(Stash)
用于临时保存未提交的修改(如切换分支前):
| 操作 |
命令 |
说明 |
| 暂存当前工作区 |
git stash |
暂存所有未提交的修改(新增文件需先 git add) |
| 查看暂存列表 |
git stash list |
显示 stash@{0}: WIP on main: a3f2d1c 等记录 |
| 恢复最近的暂存并删除记录 |
git stash pop |
常用,恢复后删除暂存 |
| 恢复指定暂存(不删除) |
git stash apply stash@{1} |
数字为暂存索引(从 git stash list 获取) |
| 删除指定暂存 |
git stash drop stash@{0} |
仅删除暂存记录,不恢复内容 |
2. 标签管理(Tag)
标记重要版本(如发布版本):
| 操作 |
命令 |
说明 |
| 创建轻量标签(仅关联提交) |
git tag <标签名> |
git tag v1.0 |
| 创建带说明的标签 |
git tag -a <标签名> -m "说明" |
git tag -a v1.0 -m "正式发布1.0版本" |
| 查看所有标签 |
git tag |
按字母排序显示 |
| 推送单个标签到远程 |
git push <远程别名> <标签名> |
git push origin v1.0 |
| 推送所有标签到远程 |
git push <远程别名> --tags |
git push origin --tags |
| 删除本地标签 |
git tag -d <标签名> |
git tag -d v1.0 |
| 删除远程标签 |
git push <远程别名> --delete <标签名> |
git push origin --delete v1.0 |
八、.gitignore 配置(必学)
创建 .gitignore 文件,指定无需 Git 跟踪的文件 / 目录,示例:
复制代码
# 忽略所有 .log 文件
*.log
# 忽略 node_modules 目录(前端依赖)
node_modules/
# 忽略 Python 虚拟环境
venv/
# 忽略 IDE 配置文件(VS Code)
.vscode/
# 例外:不忽略 important.log
!important.log
- 注意 :
.gitignore 需提交到版本库,供团队共享;已跟踪的文件无法通过 .gitignore 忽略,需先执行 git rm --cached <文件名> 取消跟踪。
九、最佳实践总结
- 提交规范 :每次提交说明需清晰(如
feat: 新增购物车功能),避免大而全的提交。
- 分支策略:主分支仅用于合并,开发在功能分支进行,定期从主分支同步到功能分支。
- 推送前检查 :推送前先
git pull 同步远程代码,解决冲突后再推送。
- 慎用强制操作 :
git reset --hard、git push -f 会丢失历史,多人协作时禁止使用。
- 定期备份:重要版本用 Tag 标记,确保可回溯到稳定状态。