feat: save current work to dev branch

This commit is contained in:
sanbuphy
2026-01-15 20:10:19 +08:00
parent c9e7ece75d
commit c8567ce23f
76 changed files with 28352 additions and 6 deletions
+755
View File
@@ -0,0 +1,755 @@
# Git 详细介绍
> 💡 **学习指南**:Git 是现代软件开发必备的版本控制工具。本章节将通过可视化演示和实战案例,带你从零掌握 Git 的核心概念、常用命令和工作流程。
## 0. 快速体验:Git 工作流
让我们先通过交互式演示,理解 Git 的核心概念:
<GitWorkflowDemo />
## 1. 什么是 Git
### 1.1 版本控制的必要性
**场景**:你在写论文,保存了多个版本:
```
论文_最终版.docx
论文_最终版_v2.docx
论文_最终版_真的最终版.docx
论文_最终版_打死不改版.docx
```
**问题**
- ❌ 无法快速找回历史版本
- ❌ 无法知道改了什么
- ❌ 多人协作容易冲突
**Git 的解决方案**
- ✅ 自动记录所有历史
- ✅ 清晰的版本对比
- ✅ 方便的分支管理
- ✅ 高效的团队协作
### 1.2 Git 的特点
- **分布式**:每个开发者都有完整的代码仓库
- **快速**:大部分操作在本地完成
- **分支管理**:轻量级的分支创建和切换
- **数据完整性**:内容寻址,确保数据不被损坏
## 2. Git 核心概念
### 2.1 三个区域
Git 工作流程涉及三个区域:
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 工作区 │ ──▶ │ 暂存区 │ ──▶ │ 仓库 │
│ (Working) │ add │ (Staging) │ commit│ (Repository)│
│ │ │ │ │ │
│ 实际文件 │ │ 准备提交 │ │ 永久历史 │
└─────────────┘ └─────────────┘ └─────────────┘
```
**工作区 (Working Directory)**
- 你实际看到的文件
- 可以随意修改
**暂存区 (Staging Area)**
- 准备提交的文件
- 通过 `git add` 添加
**仓库 (Repository)**
- Git 保存历史记录的地方
- 通过 `git commit` 提交
### 2.2 文件状态
```
未跟踪 (Untracked) → 已修改 (Modified) → 已暂存 (Staged) → 已提交 (Committed)
```
- **未跟踪**:新文件,Git 未管理
- **已修改**:文件已改变,未添加到暂存区
- **已暂存**:文件已添加到暂存区,等待提交
- **已提交**:文件已保存到仓库
## 3. Git 基础命令
### 3.1 初始化仓库
```bash
# 创建新的 Git 仓库
git init
# 克隆远程仓库
git clone https://github.com/user/repo.git
```
### 3.2 查看状态
```bash
# 查看当前状态
git status
# 查看简化状态
git status -s
```
**输出示例**
```
M modified.txt # 已修改
A new.txt # 已添加
?? untracked.txt # 未跟踪
```
### 3.3 添加文件
```bash
# 添加单个文件
git add file.txt
# 添加所有文件
git add .
# 添加所有修改的文件
git add -u
# 交互式添加
git add -i
```
### 3.4 提交更改
```bash
# 提交并添加说明
git commit -m "提交信息"
# 添加并提交(跳过 git add
git commit -am "提交信息"
# 修改最后一次提交
git commit --amend
# 查看提交历史
git log
# 查看简洁历史
git log --oneline
```
**提交信息规范**
```bash
# 好的提交信息
git commit -m "feat: 添加用户登录功能"
git commit -m "fix: 修复导航栏显示错误"
git commit -m "docs: 更新 README 文档"
# 提交信息类型
feat: 新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式调整
refactor: 重构代码
test: 添加测试
chore: 构建/工具链更新
```
## 4. 分支管理
### 4.1 什么是分支?
分支是独立的开发线,让你可以:
- 同时进行多个任务
- 不影响主线代码
- 安全地实验新想法
**分支可视化**
```
main branch: ●────●────●────●────●
feature: └────●────●
分支点 新提交
```
### 4.2 分支命令
```bash
# 查看所有分支
git branch
# 创建新分支
git branch feature-login
# 切换分支
git checkout feature-login
# 或
git switch feature-login
# 创建并切换分支
git checkout -b feature-login
# 或
git switch -c feature-login
# 删除分支
git branch -d feature-login
# 强制删除分支
git branch -D feature-login
# 查看分支合并情况
git log --graph --oneline --all
```
### 4.3 合并分支
**合并方式 1:普通合并**
```bash
# 切换到主分支
git checkout main
# 合并 feature 分支
git merge feature-login
```
**合并方式 2:变基 (Rebase)**
```bash
# 将 feature 分支的提交接到 main 最新提交
git checkout feature-login
git rebase main
```
**区别**
- **merge**:保留完整历史,有分叉
- **rebase**:线性历史,更清晰
**可视化**
```
# Merge 结果
main: ●────●────●────●
└────● (merge commit)
feature: └────●
# Rebase 结果
main: ●────●────●────●────●
feature: └────● (moved here)
```
### 4.4 冲突解决
**当合并产生冲突时**
```bash
# Git 会提示冲突
git merge feature-login
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt
```
**解决步骤**
1. 查看冲突文件:
```bash
# 标记冲突文件
git status
```
2. 编辑文件,解决冲突:
```python
# <<<<<<< HEAD
# 当前分支的代码
# =======
# feature 分支的代码
# >>>>>>> feature-login
# 改为你想要的代码
```
3. 标记冲突已解决:
```bash
git add file.txt
git commit
```
## 5. 远程仓库
### 5.1 查看远程仓库
```bash
# 查看远程仓库
git remote
# 查看详细信息
git remote -v
# 查看远程仓库信息
git remote show origin
```
### 5.2 推送到远程
```bash
# 推送到远程仓库
git push origin main
# 推送所有分支
git push --all origin
# 推送标签
git push --tags
# 首次推送分支(设置上游)
git push -u origin feature-login
```
### 5.3 从远程拉取
```bash
# 拉取并合并
git pull origin main
# 等价于
git fetch origin main
git merge origin/main
# 仅拉取不合并
git fetch origin
```
### 5.4 远程分支
```bash
# 查看远程分支
git branch -r
# 基于远程分支创建本地分支
git checkout -b local-branch origin/remote-branch
# 跟踪远程分支
git branch --set-upstream-to=origin/main main
```
## 6. Git 工作流程
### 6.1 Git Flow 工作流
**分支类型**
- **main/master**:生产环境代码
- **develop**:开发环境代码
- **feature/***:新功能开发
- **release/***:发布准备
- **hotfix/***:紧急修复
**流程**
```
1. 从 develop 创建 feature 分支
git checkout -b feature-login develop
2. 开发完成后合并回 develop
git checkout develop
git merge feature-login
3. 从 develop 创建 release 分支
git checkout -b release-1.0 develop
4. 测试通过后合并到 main 和 develop
git checkout main
git merge release-1.0
git checkout develop
git merge release-1.0
5. 紧急修复从 main 创建 hotfix
git checkout -b hotfix-bug main
# 修复后合并到 main 和 develop
```
### 6.2 GitHub Flow 工作流
**简化的工作流**
1. **main 分支**:始终可部署
2. **创建分支**`git checkout -b feature-login`
3. **提交并推送**`git push -u origin feature-login`
4. **创建 Pull Request**:在 GitHub 上
5. **代码审查**:团队 review
6. **合并到 main**:通过审查后合并
7. **部署**main 自动部署
## 7. 常用技巧
### 7.1 撤销操作
```bash
# 撤销工作区修改(恢复到最近一次提交)
git restore file.txt
# 或
git checkout -- file.txt
# 撤销暂存区(保留工作区修改)
git restore --staged file.txt
# 或
git reset HEAD file.txt
# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1
# 撤销最后一次提交(丢弃修改)
git reset --hard HEAD~1
# 回到某个提交(危险!)
git reset --hard abc1234
# 撤销某次提交(创建新提交)
git revert abc1234
```
### 7.2 暂存工作
```bash
# 临时保存工作现场
git stash
# 查看暂存列表
git stash list
# 恢复暂存
git stash pop
# 恢复指定暂存
git stash apply stash@{1}
# 删除暂存
git stash drop stash@{0}
# 清空所有暂存
git stash clear
```
### 7.3 查看差异
```bash
# 查看工作区修改
git diff
# 查看暂存区差异
git diff --staged
# 查看两次提交的差异
git diff abc1234 def5678
# 查看某文件的修改历史
git log -p file.txt
```
### 7.4 搜索代码
```bash
# 搜索代码内容
git grep "TODO"
# 搜索提交信息
git log --grep="bug"
# 搜索添加某行代码的提交
git log -S "function_name"
```
## 8. 标签管理
### 8.1 创建标签
```bash
# 创建轻量标签
git tag v1.0.0
# 创建附注标签(推荐)
git tag -a v1.0.0 -m "版本 1.0.0"
# 给某次提交打标签
git tag -a v0.9.0 abc1234 -m "版本 0.9.0"
```
### 8.2 查看标签
```bash
# 查看所有标签
git tag
# 查看标签信息
git show v1.0.0
# 查看标签对应的提交
git log v0.9.0..v1.0.0
```
### 8.3 推送标签
```bash
# 推送单个标签
git push origin v1.0.0
# 推送所有标签
git push --tags
```
### 8.4 删除标签
```bash
# 删除本地标签
git tag -d v1.0.0
# 删除远程标签
git push origin :refs/tags/v1.0.0
# 或
git push origin --delete v1.0.0
```
## 9. Git 配置
### 9.1 基本配置
```bash
# 设置用户名
git config --global user.name "Your Name"
# 设置邮箱
git config --global user.email "your.email@example.com"
# 设置默认分支名
git config --global init.defaultBranch main
# 设置编辑器
git config --global core.editor vim
# 设置差异工具
git config --global merge.tool vscode
```
### 9.2 别名配置
```bash
# 创建常用别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.lg "log --graph --oneline --all"
# 使用别名
git st # git status
git co main # git checkout main
git lg # 查看漂亮的提交历史
```
### 9.3 忽略文件
创建 `.gitignore` 文件:
```bash
# 忽略文件
*.log
*.tmp
.env
.DS_Store
# 忽略文件夹
node_modules/
dist/
.cache/
# 忽略特定文件
secret.txt
config.local.json
# 不忽略某文件
!important.log
```
**常见模板**
- [GitHub gitignore](https://github.com/github/gitignore)
- [gitignore.io](https://www.toptal.com/developers/gitignore)
## 10. 实战案例
### 10.1 日常开发流程
```bash
# 1. 更新本地代码
git pull origin main
# 2. 创建功能分支
git checkout -b feature-user-auth
# 3. 开发功能
# ... 编写代码 ...
# 4. 查看修改
git status
git diff
# 5. 添加文件
git add .
git status
# 6. 提交代码
git commit -m "feat: 添加用户认证功能"
# 7. 推送到远程
git push -u origin feature-user-auth
# 8. 在 GitHub 创建 Pull Request
# 9. 代码审查通过后合并
# 10. 删除本地分支
git branch -d feature-user-auth
```
### 10.2 紧急修复流程
```bash
# 1. 切换到主分支
git checkout main
# 2. 创建修复分支
git checkout -b hotfix-login-bug
# 3. 修复 bug
# ... 修改代码 ...
# 4. 提交修复
git add .
git commit -m "fix: 修复登录验证错误"
# 5. 合并到 main
git checkout main
git merge hotfix-login-bug
# 6. 打标签
git tag -a v1.0.1 -m "修复登录 bug"
# 7. 推送
git push origin main
git push origin v1.0.1
# 8. 合并到 develop(如果存在)
git checkout develop
git merge hotfix-login-bug
git push origin develop
# 9. 删除修复分支
git branch -d hotfix-login-bug
```
## 11. 最佳实践
### 11.1 提交规范
-**频繁提交**:小步快跑,容易回滚
-**清晰的提交信息**:说明做了什么和为什么
-**原子提交**:一个提交只做一件事
-**避免**:提交测试文件、临时文件
### 11.2 分支管理
-**主分支保护**:禁止直接推送到 main
-**代码审查**:所有合并通过 PR/MR
-**定期同步**:保持分支与主分支同步
-**避免**:长期存在的分支
### 11.3 协作建议
-**拉取前先提交**:避免冲突
-**解决冲突及时**:不要拖延
-**保持提交历史清晰**:使用 rebase 整理
-**写好文档**README、CHANGELOG
## 12. 常见问题
### 12.1 忘记推送某文件
```bash
# 修改最后一次提交
git add forgotten-file.txt
git commit --amend
git push -f origin feature-branch # 强制推送
```
### 12.2 提交信息写错了
```bash
# 修改最后一次提交信息
git commit --amend -m "正确的提交信息"
# 如果已推送,需要强制推送
git push -f origin branch
```
### 12.3 提交到了错误的分支
```bash
# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1
# 切换到正确的分支
git checkout correct-branch
# 重新提交
git commit -m "正确的提交信息"
```
### 12.4 恢复删除的文件
```bash
# 找到删除文件的提交
git log --diff-filter=D --summary
# 恢复文件
git checkout abc1234 -- deleted-file.txt
```
## 13. 学习资源
### 13.1 官方资源
- **Git 官方文档**https://git-scm.com/doc
- **Git GitHub 指南**https://guides.github.com/
### 13.2 可视化工具
- **Git 图形化界面**
- SourceTree (免费)
- GitKraken (免费)
- GitHub Desktop (免费)
- TortoiseGit (Windows)
- **在线学习**
- Learn Git Branchinghttps://learngitbranching.js.org/
- Git Immersionhttp://gitimmersion.com/
## 14. 总结
Git 核心要点:
- 🎯 **掌握基础**add、commit、pull、push
- 🌿 **善用分支**:并行开发,互不干扰
- 📝 **规范提交**:清晰的提交信息
- 🔄 **持续同步**:保持代码最新
- 🛡️ **及时备份**:推送到远程仓库
**学习建议**
- ✅ 多动手实践:创建仓库、提交、分支
- ✅ 理解原理:Git 的三个区域、数据模型
- ✅ 查看历史:使用 git log 了解项目演进
- ✅ 解决冲突:不要害怕冲突,这是协作的常态
- ✅ 使用工具:GUI 工具可以降低学习曲线
掌握 Git,你就掌握了软件开发的基础设施。现在就开始使用 Git 管理你的代码吧!