Git版本控制实用指南

1. 什么是Git?

Git是目前最流行的分布式版本控制系统,由Linux之父Linus Torvalds开发。它可以:

  • 追踪代码变更历史
  • 支持多人协作开发
  • 方便地回退到任意历史版本
  • 创建分支进行并行开发

2. 基础配置

2.1 安装Git

  • Windows:下载Git for Windows
  • Linuxsudo apt-get install git
  • Macbrew install git

2.2 初始配置

# 配置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 查看配置
git config --list

3. 基本操作

3.1 创建仓库

# 初始化新仓库
git init

# 克隆远程仓库
git clone https://github.com/user/repo.git

3.2 工作流程

# 1. 查看状态
git status

# 2. 添加文件到暂存区
git add file.txt        # 添加单个文件
git add .               # 添加所有文件

# 3. 提交更改
git commit -m "提交说明"

# 4. 推送到远程仓库
git push origin main

3.3 查看历史

# 查看提交历史
git log
git log --oneline       # 简洁模式
git log --graph         # 图形化显示

# 查看某次提交的详细信息
git show commit_hash

4. 分支管理

4.1 基本操作

# 查看分支
git branch

# 创建分支
git branch feature-x

# 切换分支
git checkout feature-x
# 或使用新命令
git switch feature-x

# 创建并切换到新分支
git checkout -b feature-y

4.2 合并分支

# 切换到目标分支
git checkout main

# 合并其他分支
git merge feature-x

# 删除已合并的分支
git branch -d feature-x

4.3 解决冲突

当合并时出现冲突:

# 1. Git会标记冲突文件
# 2. 手动编辑冲突文件,选择保留的内容
# 3. 标记为已解决
git add conflicted_file.txt
# 4. 完成合并
git commit -m "解决合并冲突"

5. 远程仓库操作

5.1 添加远程仓库

# 添加远程仓库
git remote add origin https://github.com/user/repo.git

# 查看远程仓库
git remote -v

# 修改远程仓库URL
git remote set-url origin new_url

5.2 同步操作

# 拉取最新代码
git pull origin main

# 等价于
git fetch origin
git merge origin/main

# 推送本地分支
git push origin feature-x

6. 撤销与回退

6.1 撤销工作区修改

# 撤销单个文件的修改
git checkout -- file.txt

# 撤销所有修改
git checkout -- .

6.2 撤销暂存

# 取消暂存
git reset HEAD file.txt

6.3 回退版本

# 回退到上一个版本
git reset --hard HEAD^

# 回退到指定版本
git reset --hard commit_hash

# 如果误操作,可以通过reflog恢复
git reflog
git reset --hard HEAD@{n}

7. 实用技巧

7.1 Stash - 暂存工作

# 暂存当前修改
git stash

# 查看暂存列表
git stash list

# 恢复暂存
git stash pop

# 应用但不删除暂存
git stash apply

7.2 Cherry-pick - 选择性合并

# 将某次提交应用到当前分支
git cherry-pick commit_hash

7.3 Rebase - 变基

# 将当前分支变基到main
git rebase main

# 交互式rebase(合并多个提交)
git rebase -i HEAD~3

7.4 标签管理

# 创建标签
git tag v1.0.0

# 创建带说明的标签
git tag -a v1.0.0 -m "版本1.0.0发布"

# 推送标签到远程
git push origin v1.0.0
git push origin --tags  # 推送所有标签

8. .gitignore文件

创建.gitignore文件来忽略不需要追踪的文件:

# Python
__pycache__/
*.pyc
*.pyo
*.egg-info/

# 虚拟环境
venv/
env/

# IDE
.vscode/
.idea/

# 系统文件
.DS_Store
Thumbs.db

# 编译文件
*.o
*.exe

9. 工作流模型

9.1 Git Flow

  • main:生产环境代码
  • develop:开发分支
  • feature/:功能分支
  • release/:发布分支
  • hotfix/:紧急修复分支

9.2 GitHub Flow

简化流程:

  1. 从main创建分支
  2. 开发并提交
  3. 创建Pull Request
  4. 代码审查
  5. 合并到main

10. 常见问题

10.1 修改最后一次提交

# 修改提交信息
git commit --amend -m "新的提交信息"

# 补充文件到上次提交
git add forgotten_file.txt
git commit --amend --no-edit

10.2 清理历史

# 清理未追踪的文件
git clean -f

# 包括目录
git clean -fd

11. 最佳实践

  1. 频繁提交:小步快跑,每完成一个小功能就提交
  2. 写好提交信息:清晰描述做了什么改动
  3. 善用分支:不要直接在main上开发
  4. 定期同步:及时pull最新代码
  5. 代码审查:通过PR进行code review

12. 学习资源

  • 官方文档:git-scm.com
  • 交互式教程:learngitbranching.js.org
  • 可视化工具:GitKraken, SourceTree
  • 在线练习:GitHub Learning Lab

13. 总结

Git是现代软件开发的必备工具,虽然命令众多,但常用的就那么几个。建议从基础命令开始,在实践中逐步掌握更多高级功能。


配合GitHub使用,效果更佳!