git 文档提交
This commit is contained in:
parent
c2027afe8a
commit
af08782474
321
git-example.md
Normal file
321
git-example.md
Normal file
@ -0,0 +1,321 @@
|
||||
# Git 实际案例:开发一个简单的待办事项应用
|
||||
|
||||
## 场景描述
|
||||
假设您正在开发一个待办事项Web应用,需要添加新功能、修复bug,并与团队协作。
|
||||
|
||||
## 案例步骤演示
|
||||
|
||||
### 1. 项目初始化
|
||||
```bash
|
||||
# 创建项目目录
|
||||
mkdir todo-app
|
||||
cd todo-app
|
||||
|
||||
# 初始化Git仓库
|
||||
git init
|
||||
|
||||
# 创建初始文件
|
||||
echo "# 待办事项应用" > README.md
|
||||
echo "console.log('Hello Todo App!');" > app.js
|
||||
echo "body { font-family: Arial; }" > style.css
|
||||
|
||||
# 查看状态
|
||||
git status
|
||||
# 输出:
|
||||
# On branch main
|
||||
# Untracked files:
|
||||
# README.md
|
||||
# app.js
|
||||
# style.css
|
||||
|
||||
# 添加所有文件到暂存区
|
||||
git add .
|
||||
|
||||
# 提交初始版本
|
||||
git commit -m "初始化项目:添加基础文件"
|
||||
```
|
||||
|
||||
### 2. 开发新功能 - 添加待办事项
|
||||
```bash
|
||||
# 创建功能分支
|
||||
git checkout -b feature/add-todo
|
||||
|
||||
# 修改app.js添加功能
|
||||
cat > app.js << 'EOF'
|
||||
// 待办事项数组
|
||||
let todos = [];
|
||||
|
||||
// 添加待办事项
|
||||
function addTodo(text) {
|
||||
const todo = {
|
||||
id: Date.now(),
|
||||
text: text,
|
||||
completed: false
|
||||
};
|
||||
todos.push(todo);
|
||||
console.log('添加待办事项:', text);
|
||||
}
|
||||
|
||||
// 显示所有待办事项
|
||||
function showTodos() {
|
||||
console.log('当前待办事项:');
|
||||
todos.forEach(todo => {
|
||||
console.log(`${todo.id}: ${todo.text} [${todo.completed ? '完成' : '未完成'}]`);
|
||||
});
|
||||
}
|
||||
|
||||
// 测试
|
||||
addTodo('学习Git');
|
||||
addTodo('完成项目');
|
||||
showTodos();
|
||||
EOF
|
||||
|
||||
# 查看变更
|
||||
git diff
|
||||
# 显示详细的文件变更差异
|
||||
|
||||
# 添加并提交变更
|
||||
git add app.js
|
||||
git commit -m "功能:添加待办事项的增加和显示功能"
|
||||
```
|
||||
|
||||
### 3. 继续开发 - 添加完成功能
|
||||
```bash
|
||||
# 继续在同一分支开发
|
||||
cat >> app.js << 'EOF'
|
||||
|
||||
// 标记待办事项为完成
|
||||
function completeTodo(id) {
|
||||
const todo = todos.find(t => t.id === id);
|
||||
if (todo) {
|
||||
todo.completed = true;
|
||||
console.log('已完成:', todo.text);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除待办事项
|
||||
function deleteTodo(id) {
|
||||
const index = todos.findIndex(t => t.id === id);
|
||||
if (index > -1) {
|
||||
const deleted = todos.splice(index, 1)[0];
|
||||
console.log('已删除:', deleted.text);
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# 提交新功能
|
||||
git add app.js
|
||||
git commit -m "功能:添加完成和删除待办事项功能"
|
||||
|
||||
# 查看提交历史
|
||||
git log --oneline
|
||||
# 输出类似:
|
||||
# a1b2c3d 功能:添加完成和删除待办事项功能
|
||||
# e4f5g6h 功能:添加待办事项的增加和显示功能
|
||||
# i7j8k9l 初始化项目:添加基础文件
|
||||
```
|
||||
|
||||
### 4. 发现并修复bug
|
||||
```bash
|
||||
# 在开发过程中发现一个bug,创建修复分支
|
||||
git checkout main
|
||||
git checkout -b bugfix/empty-todo-validation
|
||||
|
||||
# 修复:不允许添加空的待办事项
|
||||
sed -i '4i\\n// 验证输入不为空\nif (!text || text.trim() === "") {\n console.log("错误:待办事项不能为空");\n return;\n}' app.js
|
||||
|
||||
# 查看修改
|
||||
git diff
|
||||
|
||||
# 提交修复
|
||||
git add app.js
|
||||
git commit -m "修复:防止添加空的待办事项"
|
||||
```
|
||||
|
||||
### 5. 合并功能分支
|
||||
```bash
|
||||
# 切换到主分支
|
||||
git checkout main
|
||||
|
||||
# 合并功能分支
|
||||
git merge feature/add-todo
|
||||
# 输出:
|
||||
# Updating i7j8k9l..a1b2c3d
|
||||
# Fast-forward
|
||||
# app.js | 30 ++++++++++++++++++++++++++++++
|
||||
# 1 file changed, 30 insertions(+)
|
||||
|
||||
# 合并bug修复分支
|
||||
git merge bugfix/empty-todo-validation
|
||||
|
||||
# 如果有冲突,需要手动解决
|
||||
# 查看状态
|
||||
git status
|
||||
|
||||
# 手动编辑冲突文件后
|
||||
git add app.js
|
||||
git commit -m "合并:解决合并冲突"
|
||||
```
|
||||
|
||||
### 6. 处理合并冲突示例
|
||||
```bash
|
||||
# 假设出现冲突,文件内容会显示:
|
||||
# <<<<<<< HEAD
|
||||
# function addTodo(text) {
|
||||
# const todo = {
|
||||
# =======
|
||||
# function addTodo(text) {
|
||||
# // 验证输入不为空
|
||||
# if (!text || text.trim() === "") {
|
||||
# console.log("错误:待办事项不能为空");
|
||||
# return;
|
||||
# }
|
||||
# const todo = {
|
||||
# >>>>>>> bugfix/empty-todo-validation
|
||||
|
||||
# 手动解决冲突,保留所需的代码
|
||||
# 删除冲突标记,保留完整功能
|
||||
|
||||
# 解决后添加文件
|
||||
git add app.js
|
||||
git commit -m "解决合并冲突:保留输入验证功能"
|
||||
```
|
||||
|
||||
### 7. 与远程仓库同步
|
||||
```bash
|
||||
# 添加远程仓库(假设已在GitHub创建)
|
||||
git remote add origin https://github.com/username/todo-app.git
|
||||
|
||||
# 推送主分支
|
||||
git push -u origin main
|
||||
|
||||
# 推送所有分支
|
||||
git push origin --all
|
||||
|
||||
# 查看远程仓库
|
||||
git remote -v
|
||||
```
|
||||
|
||||
### 8. 团队协作场景
|
||||
```bash
|
||||
# 拉取其他开发者的更新
|
||||
git fetch origin
|
||||
|
||||
# 查看远程分支
|
||||
git branch -r
|
||||
|
||||
# 拉取并合并远程变更
|
||||
git pull origin main
|
||||
|
||||
# 如果有冲突,解决后继续
|
||||
git add .
|
||||
git commit -m "合并远程变更"
|
||||
```
|
||||
|
||||
### 9. 版本标记
|
||||
```bash
|
||||
# 创建版本标签
|
||||
git tag -a v1.0 -m "第一个稳定版本"
|
||||
|
||||
# 查看标签
|
||||
git tag
|
||||
|
||||
# 推送标签到远程
|
||||
git push origin v1.0
|
||||
```
|
||||
|
||||
### 10. 紧急修复场景
|
||||
```bash
|
||||
# 在生产环境发现紧急bug
|
||||
git checkout main
|
||||
git checkout -b hotfix/urgent-fix
|
||||
|
||||
# 快速修复
|
||||
echo "// 紧急修复:修复显示问题" >> app.js
|
||||
|
||||
# 提交修复
|
||||
git add app.js
|
||||
git commit -m "紧急修复:解决生产环境显示问题"
|
||||
|
||||
# 合并到主分支
|
||||
git checkout main
|
||||
git merge hotfix/urgent-fix
|
||||
|
||||
# 立即部署
|
||||
git push origin main
|
||||
|
||||
# 也合并到开发分支(如果存在)
|
||||
git checkout develop
|
||||
git merge hotfix/urgent-fix
|
||||
```
|
||||
|
||||
### 11. 历史记录管理
|
||||
```bash
|
||||
# 查看详细历史
|
||||
git log --graph --pretty=format:'%h -%d %s (%cr) <%an>' --abbrev-commit
|
||||
|
||||
# 查看文件变更历史
|
||||
git log -p app.js
|
||||
|
||||
# 查看特定时间的提交
|
||||
git log --since="2 weeks ago"
|
||||
|
||||
# 查找特定内容的提交
|
||||
git log --grep="修复"
|
||||
|
||||
# 查看某个文件的责任人
|
||||
git blame app.js
|
||||
```
|
||||
|
||||
### 12. 撤销操作示例
|
||||
```bash
|
||||
# 撤销工作区变更
|
||||
git checkout -- app.js
|
||||
|
||||
# 撤销暂存的变更
|
||||
git reset HEAD app.js
|
||||
|
||||
# 撤销最后一次提交(保留变更)
|
||||
git reset --soft HEAD~1
|
||||
|
||||
# 修改最后一次提交信息
|
||||
git commit --amend -m "新的提交信息"
|
||||
|
||||
# 创建反向提交来撤销某个提交
|
||||
git revert a1b2c3d
|
||||
```
|
||||
|
||||
### 13. 清理和维护
|
||||
```bash
|
||||
# 删除已合并的分支
|
||||
git branch -d feature/add-todo
|
||||
git branch -d bugfix/empty-todo-validation
|
||||
|
||||
# 清理远程跟踪分支
|
||||
git remote prune origin
|
||||
|
||||
# 查看分支合并状态
|
||||
git branch --merged
|
||||
git branch --no-merged
|
||||
```
|
||||
|
||||
## 完整的工作流程总结
|
||||
|
||||
1. **开始新功能**: `git checkout -b feature/功能名`
|
||||
2. **开发和提交**: `git add` → `git commit`
|
||||
3. **切换到主分支**: `git checkout main`
|
||||
4. **合并功能**: `git merge feature/功能名`
|
||||
5. **推送更新**: `git push origin main`
|
||||
6. **清理分支**: `git branch -d feature/功能名`
|
||||
|
||||
## 实际项目文件结构
|
||||
```
|
||||
todo-app/
|
||||
├── .git/ # Git仓库数据
|
||||
├── README.md # 项目说明
|
||||
├── app.js # 主要逻辑
|
||||
├── style.css # 样式文件
|
||||
└── index.html # HTML文件(后续添加)
|
||||
```
|
||||
|
||||
这个案例展示了Git在实际开发中的完整使用流程,包括功能开发、bug修复、团队协作和版本管理。
|
||||
240
git-guide.md
Normal file
240
git-guide.md
Normal file
@ -0,0 +1,240 @@
|
||||
# Git 使用指南
|
||||
|
||||
## 基础概念
|
||||
|
||||
Git 是一个分布式版本控制系统,用于跟踪代码变更历史。
|
||||
|
||||
### 核心概念
|
||||
- **仓库 (Repository)**: 存储项目所有文件和历史记录的地方
|
||||
- **工作区 (Working Directory)**: 当前正在编辑的文件
|
||||
- **暂存区 (Staging Area)**: 准备提交的文件暂存地
|
||||
- **提交 (Commit)**: 保存项目快照的操作
|
||||
|
||||
## 基础配置
|
||||
|
||||
```bash
|
||||
# 配置用户信息
|
||||
git config --global user.name "你的名字"
|
||||
git config --global user.email "你的邮箱"
|
||||
|
||||
# 查看配置
|
||||
git config --list
|
||||
```
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 初始化和克隆
|
||||
```bash
|
||||
# 初始化新仓库
|
||||
git init
|
||||
|
||||
# 克隆远程仓库
|
||||
git clone <仓库地址>
|
||||
```
|
||||
|
||||
### 文件操作
|
||||
```bash
|
||||
# 查看状态
|
||||
git status
|
||||
|
||||
# 添加文件到暂存区
|
||||
git add <文件名> # 添加单个文件
|
||||
git add . # 添加所有文件
|
||||
git add -A # 添加所有变更(包括删除)
|
||||
|
||||
# 提交变更
|
||||
git commit -m "提交信息"
|
||||
|
||||
# 查看变更差异
|
||||
git diff # 工作区与暂存区的差异
|
||||
git diff --staged # 暂存区与最后提交的差异
|
||||
```
|
||||
|
||||
### 历史查看
|
||||
```bash
|
||||
# 查看提交历史
|
||||
git log
|
||||
git log --oneline # 简洁格式
|
||||
git log --graph # 图形化显示
|
||||
|
||||
# 查看文件变更历史
|
||||
git log -p <文件名>
|
||||
```
|
||||
|
||||
### 分支操作
|
||||
```bash
|
||||
# 查看分支
|
||||
git branch # 本地分支
|
||||
git branch -r # 远程分支
|
||||
git branch -a # 所有分支
|
||||
|
||||
# 创建分支
|
||||
git branch <分支名>
|
||||
|
||||
# 切换分支
|
||||
git checkout <分支名>
|
||||
git switch <分支名> # Git 2.23+ 新命令
|
||||
|
||||
# 创建并切换分支
|
||||
git checkout -b <分支名>
|
||||
git switch -c <分支名>
|
||||
|
||||
# 删除分支
|
||||
git branch -d <分支名> # 安全删除
|
||||
git branch -D <分支名> # 强制删除
|
||||
```
|
||||
|
||||
### 合并操作
|
||||
```bash
|
||||
# 合并分支
|
||||
git merge <分支名>
|
||||
|
||||
# 变基操作
|
||||
git rebase <分支名>
|
||||
```
|
||||
|
||||
### 远程仓库
|
||||
```bash
|
||||
# 查看远程仓库
|
||||
git remote -v
|
||||
|
||||
# 添加远程仓库
|
||||
git remote add origin <仓库地址>
|
||||
|
||||
# 推送到远程
|
||||
git push origin <分支名>
|
||||
git push -u origin <分支名> # 首次推送并设置上游
|
||||
|
||||
# 拉取远程变更
|
||||
git pull origin <分支名>
|
||||
git fetch origin # 只获取不合并
|
||||
```
|
||||
|
||||
### 撤销操作
|
||||
```bash
|
||||
# 撤销工作区变更
|
||||
git checkout -- <文件名>
|
||||
git restore <文件名> # Git 2.23+ 新命令
|
||||
|
||||
# 撤销暂存区变更
|
||||
git reset HEAD <文件名>
|
||||
git restore --staged <文件名>
|
||||
|
||||
# 撤销提交
|
||||
git reset --soft HEAD~1 # 保留变更在暂存区
|
||||
git reset --mixed HEAD~1 # 保留变更在工作区
|
||||
git reset --hard HEAD~1 # 完全撤销变更
|
||||
|
||||
# 创建反向提交
|
||||
git revert <提交ID>
|
||||
```
|
||||
|
||||
## 进阶技巧
|
||||
|
||||
### 标签管理
|
||||
```bash
|
||||
# 创建标签
|
||||
git tag <标签名>
|
||||
git tag -a <标签名> -m "标签说明"
|
||||
|
||||
# 查看标签
|
||||
git tag
|
||||
|
||||
# 推送标签
|
||||
git push origin <标签名>
|
||||
git push origin --tags
|
||||
```
|
||||
|
||||
### 暂存变更
|
||||
```bash
|
||||
# 暂存当前变更
|
||||
git stash
|
||||
|
||||
# 查看暂存列表
|
||||
git stash list
|
||||
|
||||
# 应用暂存变更
|
||||
git stash apply # 应用最新暂存
|
||||
git stash pop # 应用并删除最新暂存
|
||||
git stash apply stash@{n} # 应用指定暂存
|
||||
|
||||
# 删除暂存
|
||||
git stash drop
|
||||
git stash clear # 清空所有暂存
|
||||
```
|
||||
|
||||
### 重写历史
|
||||
```bash
|
||||
# 交互式变基
|
||||
git rebase -i HEAD~n # 修改最近n个提交
|
||||
|
||||
# 修改最后一次提交
|
||||
git commit --amend
|
||||
|
||||
# 压缩提交
|
||||
git rebase -i HEAD~n # 使用squash命令
|
||||
```
|
||||
|
||||
## 工作流程建议
|
||||
|
||||
### 基本工作流
|
||||
1. `git status` - 检查当前状态
|
||||
2. `git add` - 添加变更到暂存区
|
||||
3. `git commit` - 提交变更
|
||||
4. `git push` - 推送到远程仓库
|
||||
|
||||
### 功能开发流程
|
||||
1. `git checkout -b feature/新功能` - 创建功能分支
|
||||
2. 开发和提交变更
|
||||
3. `git checkout main` - 切换到主分支
|
||||
4. `git merge feature/新功能` - 合并功能分支
|
||||
5. `git branch -d feature/新功能` - 删除功能分支
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **频繁提交**: 小步快跑,经常提交变更
|
||||
2. **清晰的提交信息**: 使用描述性的提交信息
|
||||
3. **使用分支**: 为每个功能或修复创建分支
|
||||
4. **保持主分支稳定**: 不要直接在主分支上开发
|
||||
5. **定期同步**: 经常拉取远程变更
|
||||
6. **审查变更**: 提交前检查变更内容
|
||||
|
||||
## 常见问题解决
|
||||
|
||||
### 合并冲突
|
||||
```bash
|
||||
# 查看冲突文件
|
||||
git status
|
||||
|
||||
# 手动解决冲突后
|
||||
git add <冲突文件>
|
||||
git commit
|
||||
```
|
||||
|
||||
### 忘记切换分支
|
||||
```bash
|
||||
# 将变更移到新分支
|
||||
git stash
|
||||
git checkout -b <新分支>
|
||||
git stash pop
|
||||
```
|
||||
|
||||
### 误删文件
|
||||
```bash
|
||||
# 恢复已删除的文件
|
||||
git checkout HEAD -- <文件名>
|
||||
```
|
||||
|
||||
## 有用的别名配置
|
||||
|
||||
```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.visual '!gitk'
|
||||
```
|
||||
|
||||
这样就可以使用 `git st` 代替 `git status` 等。
|
||||
Loading…
x
Reference in New Issue
Block a user