432 lines
8.6 KiB
Markdown
432 lines
8.6 KiB
Markdown
# Git 使用手册
|
||
|
||
> 版本: 1.0
|
||
> 适用系统: Ubuntu 20.04 / 通用
|
||
> Git 版本: 2.25.1+
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [Git 简介](#1-git-简介)
|
||
2. [安装与配置](#2-安装与配置)
|
||
3. [基础操作](#3-基础操作)
|
||
4. [分支管理](#4-分支管理)
|
||
5. [远程仓库](#5-远程仓库)
|
||
6. [撤销与回退](#6-撤销与回退)
|
||
7. [标签管理](#7-标签管理)
|
||
8. [常见工作流程](#8-常见工作流程)
|
||
9. [常用命令速查表](#9-常用命令速查表)
|
||
|
||
---
|
||
|
||
## 1. Git 简介
|
||
|
||
Git 是一个**分布式版本控制系统**,由 Linus Torvalds 于 2005 年创建。它能够高效地处理从小型到大型项目的版本管理,是目前最流行的版本控制工具。
|
||
|
||
### 核心特点
|
||
|
||
- **分布式**: 每个开发者本地都有完整的代码仓库
|
||
- **高效**: 针对文件差异和分支操作进行了优化
|
||
- **数据完整性**: 所有数据在存储前都会计算校验和
|
||
- **支持非线性开发**: 轻量级分支,鼓励分支开发
|
||
|
||
---
|
||
|
||
## 2. 安装与配置
|
||
|
||
### 2.1 在 Ubuntu/Debian 上安装
|
||
|
||
```bash
|
||
# 更新软件包列表
|
||
sudo apt update
|
||
|
||
# 安装 Git
|
||
sudo apt install -y git
|
||
|
||
# 验证安装
|
||
git --version
|
||
```
|
||
|
||
### 2.2 在 CentOS/RHEL 上安装
|
||
|
||
```bash
|
||
sudo yum install -y git
|
||
```
|
||
|
||
### 2.3 基本配置
|
||
|
||
```bash
|
||
# 配置用户名(提交时记录)
|
||
git config --global user.name "Your Name"
|
||
|
||
# 配置邮箱
|
||
git config --global user.email "your_email@example.com"
|
||
|
||
# 配置默认分支名(Git 2.28+)
|
||
git config --global init.defaultBranch main
|
||
|
||
# 配置默认文本编辑器
|
||
git config --global core.editor "vim"
|
||
|
||
# 查看当前配置
|
||
git config --list
|
||
```
|
||
|
||
> 配置文件的优先级: 项目级 `.git/config` > 全局 `~/.gitconfig` > 系统级 `/etc/gitconfig`
|
||
|
||
---
|
||
|
||
## 3. 基础操作
|
||
|
||
### 3.1 创建仓库
|
||
|
||
```bash
|
||
# 在当前目录初始化新仓库
|
||
git init
|
||
|
||
# 克隆远程仓库
|
||
git clone <仓库地址>
|
||
git clone <仓库地址> <本地目录名>
|
||
```
|
||
|
||
### 3.2 文件状态
|
||
|
||
Git 文件有三种状态:**已修改 (modified)**、**已暂存 (staged)**、**已提交 (committed)**
|
||
|
||
```bash
|
||
# 查看文件状态
|
||
git status
|
||
|
||
# 以简洁模式查看
|
||
git status -s
|
||
```
|
||
|
||
状态标识说明:
|
||
- `??` - 未跟踪的文件
|
||
- `M` - 已修改
|
||
- `A` - 已暂存
|
||
- `D` - 已删除
|
||
|
||
### 3.3 添加与提交
|
||
|
||
```bash
|
||
# 添加文件到暂存区
|
||
git add <文件名> # 添加指定文件
|
||
git add . # 添加所有变更
|
||
git add -A # 添加所有变更(包括删除)
|
||
git add -p # 交互式分段添加
|
||
|
||
# 提交到本地仓库
|
||
git commit -m "提交说明"
|
||
git commit -am "提交说明" # 跳过 git add(仅对已跟踪文件有效)
|
||
|
||
# 修改最后一次提交
|
||
git commit --amend -m "新的提交说明"
|
||
```
|
||
|
||
### 3.4 查看历史
|
||
|
||
```bash
|
||
# 查看提交历史
|
||
git log
|
||
git log --oneline # 简洁模式
|
||
git log --graph # 图形化显示
|
||
git log --all # 显示所有分支
|
||
git log -p # 显示差异内容
|
||
git log --author="名字" # 按作者筛选
|
||
git log --since="2024-01-01" # 按时间筛选
|
||
|
||
# 查看某个文件的修改历史
|
||
git log -p <文件名>
|
||
git blame <文件名> # 每行最后修改者
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 分支管理
|
||
|
||
### 4.1 创建与切换
|
||
|
||
```bash
|
||
# 查看分支列表
|
||
git branch # 本地分支
|
||
git branch -r # 远程分支
|
||
git branch -a # 所有分支
|
||
|
||
# 创建分支
|
||
git branch <分支名>
|
||
|
||
# 切换分支
|
||
git checkout <分支名>
|
||
git switch <分支名> # 新式语法
|
||
|
||
# 创建并切换分支
|
||
git checkout -b <分支名>
|
||
git switch -c <分支名>
|
||
|
||
# 重命名分支
|
||
git branch -m <旧名> <新名>
|
||
```
|
||
|
||
### 4.2 合并与变基
|
||
|
||
```bash
|
||
# 合并指定分支到当前分支
|
||
git merge <分支名>
|
||
|
||
# 变基操作(将当前分支的提交移至目标分支顶端)
|
||
git rebase <分支名>
|
||
|
||
# 交互式变基(合并、修改提交记录)
|
||
git rebase -i HEAD~3 # 修改最近 3 个提交
|
||
```
|
||
|
||
> **合并 vs 变基**: 合并保留完整历史,变基使历史更线性。公共分支推荐使用合并,个人分支可使用变基。
|
||
|
||
### 4.3 删除分支
|
||
|
||
```bash
|
||
# 删除本地分支
|
||
git branch -d <分支名> # 安全删除(会检查是否已合并)
|
||
git branch -D <分支名> # 强制删除
|
||
|
||
# 删除远程分支
|
||
git push origin --delete <分支名>
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 远程仓库
|
||
|
||
### 5.1 管理远程仓库
|
||
|
||
```bash
|
||
# 查看远程仓库
|
||
git remote -v
|
||
|
||
# 添加远程仓库
|
||
git remote add origin <仓库地址>
|
||
|
||
# 修改远程仓库地址
|
||
git remote set-url origin <新地址>
|
||
|
||
# 删除远程仓库
|
||
git remote remove origin
|
||
```
|
||
|
||
### 5.2 推送与拉取
|
||
|
||
```bash
|
||
# 推送到远程仓库
|
||
git push origin <分支名>
|
||
git push -u origin <分支名> # 首次推送,建立关联
|
||
git push --all # 推送所有分支
|
||
git push origin --tags # 推送所有标签
|
||
|
||
# 拉取远程更新
|
||
git pull # 拉取并合并(相当于 fetch + merge)
|
||
git pull --rebase # 拉取并变基(推荐)
|
||
git fetch # 仅拉取,不自动合并
|
||
```
|
||
|
||
### 5.3 处理冲突
|
||
|
||
```bash
|
||
# 当合并或拉取产生冲突时:
|
||
# 1. 编辑冲突文件,保留需要的内容
|
||
# 2. 标记为已解决
|
||
git add <已解决冲突的文件>
|
||
|
||
# 3. 完成合并
|
||
git commit
|
||
|
||
# 中止合并
|
||
git merge --abort
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 撤销与回退
|
||
|
||
### 6.1 撤销工作区修改
|
||
|
||
```bash
|
||
# 恢复文件到最近一次提交的状态
|
||
git checkout -- <文件名>
|
||
git restore <文件名> # 新式语法
|
||
```
|
||
|
||
### 6.2 撤销暂存区
|
||
|
||
```bash
|
||
# 将文件从暂存区移出(保留工作区修改)
|
||
git reset HEAD <文件名>
|
||
git restore --staged <文件名> # 新式语法
|
||
```
|
||
|
||
### 6.3 回退提交
|
||
|
||
```bash
|
||
# 软重置(保留工作区和暂存区修改)
|
||
git reset --soft HEAD~1
|
||
|
||
# 混合重置(保留工作区,清空暂存区)- 默认模式
|
||
git reset --mixed HEAD~1
|
||
|
||
# 硬重置(丢弃所有修改)- 谨慎使用!
|
||
git reset --hard HEAD~1
|
||
|
||
# 回退到指定提交
|
||
git reset --hard <提交哈希>
|
||
|
||
# 生成一个新的反向提交来撤销修改
|
||
git revert HEAD # 撤销最近一次提交
|
||
git revert <提交哈希>
|
||
```
|
||
|
||
> `git reset` 与 `git revert` 的区别:`reset` 会删除提交历史,`revert` 会保留历史并新增一个反向提交。公共分支应使用 `revert`。
|
||
|
||
---
|
||
|
||
## 7. 标签管理
|
||
|
||
```bash
|
||
# 创建标签
|
||
git tag <标签名> # 轻量标签
|
||
git tag -a <标签名> -m "说明" # 附注标签
|
||
|
||
# 查看标签
|
||
git tag
|
||
git tag -l "v1.*" # 匹配模式
|
||
|
||
# 推送标签到远程
|
||
git push origin <标签名>
|
||
git push origin --tags
|
||
|
||
# 删除标签
|
||
git tag -d <标签名>
|
||
git push origin --delete <标签名>
|
||
```
|
||
|
||
---
|
||
|
||
## 8. 常见工作流程
|
||
|
||
### 8.1 Git Flow 工作流
|
||
|
||
适用于有固定发布周期的项目:
|
||
|
||
- `main` - 主分支,存放稳定版本
|
||
- `develop` - 开发分支
|
||
- `feature/*` - 功能分支
|
||
- `release/*` - 发布分支
|
||
- `hotfix/*` - 紧急修复分支
|
||
|
||
### 8.2 GitHub Flow
|
||
|
||
适用于持续交付的项目:
|
||
|
||
1. 从 `main` 创建功能分支
|
||
2. 提交修改
|
||
3. 发起 Pull Request
|
||
4. 代码评审 + 自动化测试
|
||
5. 合并回 `main`
|
||
6. 立即部署
|
||
|
||
### 8.3 日常开发流程示例
|
||
|
||
```bash
|
||
# 1. 更新主分支
|
||
git checkout main
|
||
git pull
|
||
|
||
# 2. 创建功能分支
|
||
git checkout -b feature/my-feature
|
||
|
||
# 3. 开发并提交
|
||
git add .
|
||
git commit -m "feat: 添加新功能"
|
||
|
||
# 4. 同步上游变更
|
||
git fetch origin
|
||
git rebase origin/main
|
||
|
||
# 5. 推送并创建 Pull Request
|
||
git push -u origin feature/my-feature
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 常用命令速查表
|
||
|
||
| 操作 | 命令 |
|
||
|------|------|
|
||
| 初始化仓库 | `git init` |
|
||
| 克隆仓库 | `git clone <url>` |
|
||
| 查看状态 | `git status` |
|
||
| 添加文件 | `git add <file>` |
|
||
| 提交 | `git commit -m "msg"` |
|
||
| 查看日志 | `git log --oneline --graph` |
|
||
| 创建分支 | `git branch <name>` |
|
||
| 切换分支 | `git switch <name>` |
|
||
| 创建+切换 | `git switch -c <name>` |
|
||
| 合并分支 | `git merge <name>` |
|
||
| 推送 | `git push origin <branch>` |
|
||
| 拉取 | `git pull --rebase` |
|
||
| 查看差异 | `git diff` |
|
||
| 暂存修改 | `git stash` |
|
||
| 恢复暂存 | `git stash pop` |
|
||
| 查看远程 | `git remote -v` |
|
||
|
||
---
|
||
|
||
## 附录
|
||
|
||
### .gitignore 文件示例
|
||
|
||
```gitignore
|
||
# 编译输出
|
||
*.o
|
||
*.class
|
||
*.exe
|
||
*.dll
|
||
|
||
# 依赖目录
|
||
node_modules/
|
||
vendor/
|
||
__pycache__/
|
||
|
||
# IDE 配置
|
||
.vscode/
|
||
.idea/
|
||
*.swp
|
||
|
||
# 系统文件
|
||
.DS_Store
|
||
Thumbs.db
|
||
|
||
# 环境配置
|
||
.env
|
||
*.local
|
||
```
|
||
|
||
### 提交信息规范
|
||
|
||
推荐使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范:
|
||
|
||
```
|
||
<类型>(<范围>): <简短描述>
|
||
|
||
<详细描述>
|
||
|
||
<尾部信息>
|
||
```
|
||
|
||
类型包括:`feat`、`fix`、`docs`、`style`、`refactor`、`test`、`chore` 等。
|
||
|
||
---
|
||
|
||
> 本文档持续更新中...
|
||
> 更多信息请访问 [Git 官方文档](https://git-scm.com/doc)
|