Git知识完全指南:从入门到进阶实战

一、Git基础概念

1.1 Git是什么?

Git是一个分布式版本控制系统,由Linus Torvalds于2005年创建,用于管理Linux内核开发。与SVN等集中式版本控制系统不同,Git每个用户都有完整的仓库副本。

1.2 Git核心优势

  • 分布式架构:每个开发者都有完整的项目历史记录
  • 高效性能:大部分操作在本地完成,速度极快
  • 强大的分支管理:分支创建、合并简单高效
  • 数据完整性:所有内容在存储前都经过校验和计算

1.3 三个工作区域

  1. 工作目录(Working Directory):实际编辑文件的地方
  2. 暂存区(Staging Area/Index):准备提交的文件列表
  3. 仓库(Repository):存储项目所有版本和元数据

二、Git安装与配置

2.1 安装Git

1
2
3
4
5
6
7
8
9
10
# Ubuntu/Debian
sudo apt-get install git

# CentOS/RHEL
sudo yum install git

# macOS
brew install git

# Windows:从官网下载安装程序

2.2 基础配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 配置用户信息(必须)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

# 配置文本编辑器(可选)
git config --global core.editor "vim"

# 查看配置
git config --list

# 设置别名(提高效率)
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'

2.3 配置验证

1
2
3
4
5
6
# 验证Git是否正确安装
git --version

# 查看用户配置
git config user.name
git config user.email

三、Git基础操作

3.1 创建仓库

1
2
3
4
5
6
7
8
9
# 在当前目录初始化新仓库
git init

# 初始化并指定目录名
git init my_project

# 克隆现有仓库
git clone https://github.com/user/repo.git
git clone https://github.com/user/repo.git my_folder # 克隆到指定文件夹

3.2 基础工作流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看状态
git status
git status -s # 简洁模式

# 添加文件到暂存区
git add filename.txt # 添加单个文件
git add . # 添加所有文件
git add *.js # 添加所有js文件
git add src/ # 添加src目录下所有文件

# 提交更改
git commit -m "提交说明"
git commit -m "fix: 修复登录bug" # 推荐使用约定式提交格式
git commit -am "提交说明" # 添加并提交已跟踪文件(跳过git add)

# 查看提交历史
git log
git log --oneline # 单行显示
git log --graph # 图形化显示分支
git log -p # 显示具体修改内容
git log --stat # 显示统计信息
git log --since="2 weeks ago" # 显示指定时间后的提交

3.3 文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 重命名文件
git mv oldname newname

# 删除文件
git rm filename.txt # 从仓库和工作区删除
git rm --cached filename.txt # 仅从仓库删除,保留工作区文件

# 忽略文件:创建.gitignore
# 示例内容:
node_modules/ # 忽略目录
*.log # 忽略所有log文件
.DS_Store # 忽略系统文件
.env # 忽略环境文件
!important.log # 重要!不忽略这个log文件

四、分支管理

4.1 基础分支操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看分支
git branch # 本地分支
git branch -a # 所有分支(包括远程)
git branch -v # 显示最后一次提交

# 创建分支
git branch feature-login # 创建分支
git checkout -b feature-login # 创建并切换分支

# 切换分支
git checkout main
git checkout feature-login

# 合并分支
git checkout main
git merge feature-login

# 删除分支
git branch -d feature-login # 安全删除(已合并)
git branch -D feature-login # 强制删除(未合并)

# 重命名分支
git branch -m old-name new-name

4.2 分支策略(Git Flow)

1
2
3
4
5
6
7
8
9
10
# 主分支
main/master # 稳定版本分支,用于生产环境

# 开发分支
develop # 开发主分支,功能集成

# 辅助分支
feature/* # 功能开发分支
release/* # 预发布分支
hotfix/* # 紧急修复分支

4.3 高级分支操作

1
2
3
4
5
6
7
8
9
# 查看分支图
git log --oneline --graph --all

# 合并策略
git merge --no-ff feature-login # 禁用快进合并,保留分支历史

# 变基(整理提交历史)
git rebase main # 将当前分支变基到main
git rebase -i HEAD~3 # 交互式变基(合并/重排提交)

五、远程仓库操作

5.1 管理远程仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 添加远程仓库
git remote add origin https://github.com/user/repo.git

# 查看远程仓库
git remote -v

# 重命名远程仓库
git remote rename origin upstream

# 删除远程仓库
git remote remove origin

# 修改远程仓库URL
git remote set-url origin https://github.com/user/new-repo.git

5.2 推送与拉取

1
2
3
4
5
6
7
8
9
10
11
12
13
# 推送分支
git push origin main # 推送main分支
git push origin feature-login # 推送指定分支
git push -u origin feature-login # 推送并设置上游分支
git push --force origin main # 强制推送(慎用!)

# 拉取更新
git pull origin main # 拉取并合并
git fetch origin # 仅获取更新,不合并
git fetch --prune # 获取并清理已删除的远程分支

# 拉取远程分支到本地
git checkout -b feature-login origin/feature-login

5.3 协作工作流

1
2
3
4
5
6
7
8
# 1. Fork工作流(开源项目常用)
# 在GitHub上fork项目 → 克隆到本地 → 开发 → 推送到个人远程仓库 → 创建Pull Request

# 2. 集中式工作流(小团队)
# 所有开发者直接推送到同一个远程仓库

# 3. Git Flow工作流(企业常用)
# 基于功能分支、发布分支、热修复分支的严格流程

六、撤销与回退

6.1 撤销工作区更改

1
2
3
4
5
6
7
# 丢弃工作区的修改
git checkout -- filename.txt # 恢复单个文件
git checkout -- . # 恢复所有文件

# 使用restore命令(Git 2.23+)
git restore filename.txt # 恢复文件
git restore --staged filename.txt # 从暂存区移除文件

6.2 撤销暂存区更改

1
2
3
# 将文件移出暂存区
git reset HEAD filename.txt
git restore --staged filename.txt # Git 2.23+

6.3 撤销提交

1
2
3
4
5
6
7
8
9
10
11
# 撤销最后一次提交(保留更改)
git reset --soft HEAD~1

# 撤销提交和暂存(保留工作区更改)
git reset HEAD~1 # 或 git reset --mixed HEAD~1

# 完全撤销提交(删除更改)
git reset --hard HEAD~1

# 撤销特定提交
git revert commit_hash # 创建新的提交来撤销更改(推荐用于已推送的提交)

6.4 恢复已删除的文件

1
2
3
4
5
# 查找删除文件的提交
git log --diff-filter=D --summary

# 恢复文件
git checkout commit_hash^ -- filename.txt

七、高级功能与技巧

7.1 储藏(Stash)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 储藏当前更改
git stash
git stash save "描述信息"

# 查看储藏列表
git stash list

# 应用储藏
git stash apply stash@{0} # 应用指定储藏,不删除
git stash pop # 应用并删除最新储藏

# 删除储藏
git stash drop stash@{0} # 删除指定储藏
git stash clear # 删除所有储藏

7.2 标签管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建标签
git tag v1.0.0 # 轻量标签
git tag -a v1.0.0 -m "版本1.0.0" # 附注标签

# 查看标签
git tag
git show v1.0.0

# 推送标签
git push origin v1.0.0 # 推送单个标签
git push origin --tags # 推送所有标签

# 删除标签
git tag -d v1.0.0 # 删除本地标签
git push origin --delete v1.0.0 # 删除远程标签

7.3 子模块(Submodule)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 添加子模块
git submodule add https://github.com/user/repo.git libs/repo

# 克隆包含子模块的项目
git clone https://github.com/user/main-project.git
git submodule init
git submodule update

# 更新子模块
git submodule update --remote

# 删除子模块
# 1. 删除子模块目录
# 2. 删除.gitmodules中的相关行
# 3. 删除.git/config中的相关配置
# 4. 删除.git/modules/中的相关目录

八、问题排查与调试

8.1 查看差异

1
2
3
4
5
6
7
8
9
10
11
# 查看工作区与暂存区的差异
git diff

# 查看暂存区与最新提交的差异
git diff --staged

# 查看两次提交之间的差异
git diff commit1 commit2

# 查看文件修改历史
git blame filename.txt

8.2 查找问题

1
2
3
4
5
6
7
8
9
10
# 二分查找(定位引入问题的提交)
git bisect start
git bisect bad # 当前版本有问题
git bisect good v1.0.0 # 指定某个版本没问题
# Git会自动切到中间版本,你测试后标记good或bad
git bisect reset # 结束二分查找

# 查找包含特定字符串的提交
git log -S "function_name" # 查找添加或删除该字符串的提交
git log --grep="关键字" # 查找提交信息包含关键字的提交

8.3 清理仓库

1
2
3
4
5
6
7
8
9
# 清理未跟踪的文件和目录
git clean -n # 预览将要删除的文件
git clean -f # 删除未跟踪的文件
git clean -fd # 删除未跟踪的文件和目录
git clean -xfd # 删除所有未跟踪的文件(包括.gitignore忽略的)

# 优化仓库
git gc # 垃圾回收,优化仓库
git prune # 删除不可达的对象

九、Git最佳实践

9.1 提交规范

推荐使用约定式提交(Conventional Commits):

  • feat: 新功能
  • fix: 修复bug
  • docs: 文档更新
  • style: 代码格式调整
  • refactor: 重构代码
  • test: 测试相关
  • chore: 构建过程或辅助工具变动

示例:

1
2
3
git commit -m "feat: 添加用户登录功能"
git commit -m "fix: 修复登录页面样式错位问题"
git commit -m "docs: 更新API使用说明"

9.2 分支管理规范

  1. 主分支保护:main/master分支应设置保护,禁止直接推送
  2. 功能分支:每个功能/修复创建独立分支
  3. 及时删除:合并后及时删除已完成的分支
  4. 明确命名:使用清晰的命名规范,如feature/user-authhotfix/payment-error

9.3 工作流程建议

  1. 频繁提交:小步提交,每次提交解决一个问题
  2. 先拉后推:推送前先拉取最新代码
  3. 解决冲突:在本地解决冲突后再推送
  4. 定期同步:每天开始工作前先同步远程仓库

十、常用命令速查表

类别 命令 说明
仓库 git init 初始化仓库
git clone <url> 克隆远程仓库
状态 git status 查看状态
git log 查看提交历史
操作 git add <file> 添加到暂存区
git commit -m "msg" 提交更改
git push 推送到远程
git pull 拉取并合并
分支 git branch 查看分支
git checkout -b <name> 创建并切换分支
git merge <branch> 合并分支
撤销 git reset 撤销提交
git revert 创建撤销提交
git checkout -- <file> 撤销工作区修改
其他 git stash 储藏更改
git tag 标签管理
git diff 查看差异

总结

Git是一个强大而灵活的工具,掌握它需要理论学习和实践操作相结合。建议:

  1. 从基础开始:先掌握addcommitpushpull等基础命令
  2. 多实践:在实际项目中应用Git,遇到问题及时查阅文档
  3. 善用图形工具:如GitHub Desktop、SourceTree等辅助理解
  4. 学习工作流:根据团队需求选择合适的工作流程

记住,Git的核心思想是记录每次更改,而不是覆盖。通过合理使用分支、提交和合并,你可以高效地管理任何规模的项目。