---
title: Git 完整教程指南
tags: [git, 版本控制, 教程]
date: 2025-10-11T08:00:00Z
summary: 从零开始学习 Git 版本控制系统,包含基础概念、常用命令、分支管理、协作流程等完整内容。
---
> 本教程适用于 Git 初学者到进阶用户,涵盖日常开发中 90% 的使用场景。
## 什么是 Git
Git 是一个分布式版本控制系统,用于跟踪文件的修改历史。与集中式版本控制系统(如 SVN)不同,Git 的每个工作副本都是完整的仓库,包含项目的完整历史记录。
### Git 的核心概念
- **仓库(Repository)**: 项目的版本控制中心,包含所有文件的历史记录。
- **工作目录(Working Directory)**: 你在本地进行修改的文件所在目录。
- **暂存区(Staging Area)**: 一个中间区域,用于暂存你要提交的文件变更。
- **本地仓库(Local Repository)**: 你在本地计算机上的仓库,包含完整的历史记录。
- **远程仓库(Remote Repository)**: 托管在服务器上的仓库,用于与团队成员共享代码。
### Git 工作流程
```mermaid
graph TB
subgraph "Git 工作区域"
A[工作目录
Working Directory]
B[暂存区
Staging Area]
C[本地仓库
Local Repository]
D[远程仓库
Remote Repository]
end
A -->|git add| B
B -->|git commit| C
C -->|git push| D
D -->|git pull| C
C -->|git checkout| A
style A fill:#e3f2fd
style B fill:#f3e5f5
style C fill:#e8f5e9
style D fill:#fff3e0
```
## Git 安装与配置
### 安装 Git
**Windows**: 下载并安装 [Git for Windows](https://git-scm.com/download/win)
**macOS**:
```bash
# 使用 Homebrew
brew install git
# 或者下载安装包
# https://git-scm.com/download/mac
```
**Linux (Ubuntu/Debian)**:
```bash
sudo apt update
sudo apt install git
```
**Linux (CentOS/RHEL)**:
```bash
sudo yum install git
```
### 基础配置
```bash
# 配置用户信息(必须)
git config --global user.name "你的名字"
git config --global user.email "your.email@example.com"
# 配置默认分支名(推荐)
git config --global init.defaultBranch main
# 配置文本编辑器(可选)
git config --global core.editor vim
# 查看配置
git config --list
```
## Git 基础操作
### 初始化仓库
```bash
# 在当前目录初始化 Git 仓库
git init
# 克隆远程仓库
git clone https://github.com/username/repository.git
# 克隆并指定目录名
git clone https://github.com/username/repository.git my-project
```
### 文件状态管理
```bash
# 查看文件状态
git status
# 添加文件到暂存区
git add filename.txt
git add . # 添加所有文件
git add -A # 添加所有变更(包括删除)
# 从暂存区移除文件
git reset filename.txt
# 提交变更
git commit -m "提交信息"
git commit -m "标题" -m "详细描述"
# 跳过暂存区直接提交
git commit -am "提交信息"
```
### 查看历史
```bash
# 查看提交历史
git log
# 简洁查看
git log --oneline
# 查看最近5次提交
git log -5
# 查看文件修改历史
git log --follow filename.txt
# 查看每次提交的差异
git log -p
# 查看统计信息
git log --stat
```
### 撤销操作
```bash
# 撤销工作区的修改
git checkout -- filename.txt
# 撤销暂存区的文件
git reset HEAD filename.txt
# 修改最后一次提交
git commit --amend -m "新的提交信息"
# 回退到指定版本
git reset --hard commit-hash
# 软回退(保留修改)
git reset --soft commit-hash
```
## 分支管理
### 分支概念
```mermaid
graph LR
A[main分支] --> B[创建feature分支]
B --> C[开发新功能]
C --> D[合并回main]
A --> E[创建hotfix分支]
E --> F[修复bug]
F --> D
style A fill:#4caf50
style B fill:#2196f3
style C fill:#2196f3
style D fill:#4caf50
style E fill:#ff9800
style F fill:#ff9800
```
### 分支操作
```bash
# 查看分支
git branch # 本地分支
git branch -r # 远程分支
git branch -a # 所有分支
# 创建分支
git branch feature-login
git checkout -b feature-login # 创建并切换
# 切换分支
git checkout main
git switch main # Git 2.23+ 新命令
# 合并分支
git merge feature-login
# 删除分支
git branch -d feature-login # 安全删除
git branch -D feature-login # 强制删除
# 重命名分支
git branch -m old-name new-name
```
### 解决冲突
当合并分支时出现冲突:
```bash
# 1. 查看冲突文件
git status
# 2. 手动编辑冲突文件
# 删除冲突标记,保留需要的代码
# 3. 标记冲突已解决
git add filename.txt
# 4. 完成合并
git commit
```
## 远程仓库操作
### 连接远程仓库
```bash
# 添加远程仓库
git remote add origin https://github.com/username/repository.git
# 查看远程仓库
git remote -v
# 重命名远程仓库
git remote rename origin github
# 删除远程仓库
git remote remove origin
```
### 推送与拉取
```bash
# 推送到远程仓库
git push origin main
# 首次推送(设置上游分支)
git push -u origin main
# 强制推送(谨慎使用)
git push -f origin main
# 拉取更新
git pull origin main
# 获取更新但不合并
git fetch origin
```
### 标签管理
```bash
# 创建标签
git tag v1.0.0
git tag -a v1.0.0 -m "版本说明"
# 查看标签
git tag
# 推送标签
git push origin v1.0.0
git push origin --tags
# 删除标签
git tag -d v1.0.0
git push origin --delete v1.0.0
```
## 高级功能
### Stash(暂存)
```bash
# 保存当前工作进度
git stash
# 查看保存的进度
git stash list
# 恢复最近保存的进度
git stash pop
# 恢复指定的进度
git stash apply stash@{1}
# 删除保存的进度
git stash drop stash@{0}
```
### Cherry-pick
```bash
# 选择性地合并某个提交
git cherry-pick commit-hash
# 合并多个提交
git cherry-pick commit1 commit2
# 继续合并(解决冲突后)
git cherry-pick --continue
```
### Rebase
```bash
# 交互式 rebase
git rebase -i HEAD~3
# 继续 rebase
git rebase --continue
# 中止 rebase
git rebase --abort
# 跳过当前提交
git rebase --skip
```
### 子模块
```bash
# 添加子模块
git submodule add https://github.com/user/repo.git path/to/submodule
# 初始化子模块
git submodule init
# 更新子模块
git submodule update
# 递归更新
git submodule update --recursive --remote
```
## Git 工作流程
### Git Flow 工作流
```mermaid
graph TB
A[main] --> B[develop]
B --> C[feature/feature-1]
B --> D[feature/feature-2]
C --> B
D --> B
B --> E[release/v1.0]
E --> A
E --> F[hotfix/fix-1]
F --> A
F --> B
style A fill:#4caf50
style B fill:#2196f3
style C fill:#9c27b0
style D fill:#9c27b0
style E fill:#ff9800
style F fill:#f44336
```
### GitHub Flow
1. **创建分支**:从 main 分支创建功能分支
2. **提交修改**:在功能分支上进行开发
3. **创建 Pull Request**:提交代码审查
4. **代码审查**:团队成员进行代码审查
5. **合并分支**:审查通过后合并到 main 分支
6. **部署**:自动或手动部署到生产环境
### GitLab Flow
结合 Git Flow 和 GitHub Flow 的优点,支持多环境部署。
## 实用技巧
### 配置别名
```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'
```
### 忽略文件
创建 `.gitignore` 文件:
```
# 忽略所有 .log 文件
*.log
# 忽略 node_modules 目录
node_modules/
# 忽略 IDE 配置文件
.vscode/
.idea/
# 忽略操作系统文件
.DS_Store
Thumbs.db
# 忽略编译输出
dist/
build/
*.exe
*.dll
```
### 查看文件差异
```bash
# 查看工作区与暂存区的差异
git diff
# 查看暂存区与仓库的差异
git diff --staged
# 查看两个提交的差异
git diff commit1 commit2
# 查看文件的历史修改
git log -p filename.txt
```
### 统计信息
```bash
# 查看提交统计
git shortlog -sn
# 查看代码行数统计
git log --stat
# 查看贡献者
git log --pretty=format:"%an" | sort | uniq -c | sort -nr
```
## 常见问题解决
### 误提交大文件
```bash
# 从仓库中删除大文件
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch path/to/large-file' \
--prune-empty --tag-name-filter cat -- --all
# 清理和垃圾回收
git reflog expire --expire=now --all
git gc --prune=now --aggressive
```
### 修改历史提交信息
```bash
# 修改最近一次提交
git commit --amend
# 修改历史提交(交互式)
git rebase -i HEAD~3
```
### 找回丢失的提交
```bash
# 查看引用日志
git reflog
# 恢复到某个状态
git reset --hard HEAD@{1}
```
### 子模块问题
```bash
# 更新子模块
git submodule update --init --recursive
# 克隆包含子模块的仓库
git clone --recursive https://github.com/user/repo.git
```
## 最佳实践
### 提交信息规范
```
类型(范围): 简短描述
详细描述(可选)
Fixes #123
```
**类型说明**:
- `feat`: 新功能
- `fix`: 修复bug
- `docs`: 文档更新
- `style`: 代码格式调整
- `refactor`: 代码重构
- `test`: 测试相关
- `chore`: 构建过程或辅助工具的变动
### 分支命名规范
- `feature/功能名称`:新功能开发
- `bugfix/bug描述`:bug修复
- `hotfix/紧急修复`:紧急修复
- `release/版本号`:发布准备
- `test/测试名称`:测试相关
### 工作流程建议
1. **频繁提交**:小而频繁的提交比大而少的提交更好
2. **明确提交信息**:写清楚提交的目的和内容
3. **及时拉取**:开始工作前拉取最新代码
4. **使用分支**:不要在主分支上直接开发
5. **代码审查**:提交前进行自我审查
6. **保持同步**:定期与远程仓库同步
## 学习资源
### 官方资源
- [Git 官方文档](https://git-scm.com/doc)
- [Pro Git 书籍](https://git-scm.com/book/zh/v2)
- [GitHub Guides](https://guides.github.com/)
### 交互式学习
- [Learn Git Branching](https://learngitbranching.js.org/)
- [GitHub Learning Lab](https://lab.github.com/)
- [Git 小游戏](https://onlywei.github.io/explain-git-with-d3/)
### 可视化工具
- [GitKraken](https://www.gitkraken.com/)
- [SourceTree](https://www.sourcetreeapp.com/)
- [GitHub Desktop](https://desktop.github.com/)
## 总结
Git 是现代软件开发中不可或缺的工具。掌握 Git 不仅能够提高开发效率,还能更好地与团队协作。本教程涵盖了 Git 的核心概念和常用操作,建议通过实践来加深理解。
记住 Git 的学习曲线可能有些陡峭,但一旦掌握,它将成为你开发工具箱中最强大的工具之一。持续练习,遇到问题不要害怕,Git 的强大功能值得你投入时间学习。
---
> 💡 **提示**:Git 命令很多,不需要全部记住。常用的命令熟练掌握即可,其他的可以按需查询。建议收藏本教程作为参考手册。