Git 基础
Git 是目前世界上最流行的分布式版本控制系统,本教程将帮助你掌握 Git 的基本概念和日常使用技巧。
Git 简介
Git 是由 Linux 之父 Linus Torvalds 在 2005 年创建的分布式版本控制系统。与集中式版本控制系统(如 SVN)不同,Git 允许每个开发者在本地拥有完整的代码仓库副本,不需要持续连接到中央服务器。
Git 的主要特点
- 分布式架构:每个开发者都拥有完整的代码历史
- 高性能:即使对大型项目也能快速操作
- 数据完整性:使用 SHA-1 哈希确保数据完整性
- 分支管理:轻量级的分支创建和合并
- 灵活的工作流:支持多种开发工作流程
- 开源免费:遵循 GNU 通用公共许可证
安装 Git
Windows
- 访问 Git 官网 下载安装程序
- 运行安装程序,按照向导完成安装
- 安装完成后,可以通过命令提示符或 Git Bash 使用 Git
macOS
- 使用 Homebrew 安装:bash
brew install git
- 或访问 Git 官网 下载安装程序
Linux (Ubuntu/Debian)
bash
sudo apt-get update
sudo apt-get install git
验证安装
安装完成后,打开终端或命令提示符,输入:
bash
git --version
如果显示 Git 版本号,则表示安装成功。
Git 基本配置
设置用户信息
首次使用 Git 前,需要设置用户名和邮箱:
bash
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
查看配置
bash
# 查看所有配置
git config --list
# 查看特定配置项
git config user.name
配置编辑器
bash
git config --global core.editor "code --wait" # 设置 VS Code 为默认编辑器
配置别名
bash
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 基本概念
工作区、暂存区和版本库
- 工作区(Working Directory):你当前看到的目录
- 暂存区(Staging Area):临时存储你的改动
- 版本库(Repository):存储所有提交的历史记录
Git 文件状态
- 未跟踪(Untracked):新文件,Git 不知道它的存在
- 已跟踪(Tracked):Git 知道的文件,可以是:
- 未修改(Unmodified):文件未发生变化
- 已修改(Modified):文件已修改但未暂存
- 已暂存(Staged):文件已添加到暂存区
Git 基本操作
创建仓库
bash
# 初始化新仓库
git init
# 克隆现有仓库
git clone https://github.com/username/repository.git
添加和提交
bash
# 查看文件状态
git status
# 添加文件到暂存区
git add filename.txt # 添加单个文件
git add . # 添加所有文件
# 提交更改
git commit -m "提交信息"
# 添加并提交所有更改
git commit -am "提交信息"
查看历史
bash
# 查看提交历史
git log
# 查看简洁历史
git log --oneline
# 查看图形化历史
git log --graph --oneline --all
撤销更改
bash
# 撤销工作区的修改
git checkout -- filename.txt
# 撤销暂存区的修改
git reset HEAD filename.txt
# 修改最后一次提交
git commit --amend
分支管理
基本分支操作
bash
# 查看分支
git branch
# 创建分支
git branch branch-name
# 切换分支
git checkout branch-name
# 创建并切换分支
git checkout -b branch-name
# 合并分支
git merge branch-name
# 删除分支
git branch -d branch-name
解决合并冲突
当两个分支修改了同一个文件的同一部分时,合并时会产生冲突:
Git 会在文件中标记冲突区域:
<<<<<<< HEAD 当前分支的内容 ======= 要合并的分支内容 >>>>>>> branch-name
手动编辑文件解决冲突
添加解决后的文件到暂存区:
git add filename.txt
完成合并提交:
git commit
远程仓库操作
添加远程仓库
bash
git remote add origin https://github.com/username/repository.git
查看远程仓库
bash
git remote -v
推送到远程仓库
bash
# 首次推送
git push -u origin master
# 后续推送
git push
从远程仓库获取更新
bash
# 获取远程更新但不合并
git fetch origin
# 获取远程更新并合并到当前分支
git pull
Git 工作流
功能分支工作流
- 从主分支创建功能分支:
git checkout -b feature-x
- 在功能分支上开发并提交
- 完成后合并回主分支:bash
git checkout main git merge feature-x
- 删除功能分支:
git branch -d feature-x
Gitflow 工作流
Gitflow 是一个更结构化的分支模型,包含以下分支类型:
- master:稳定的生产代码
- develop:开发分支
- feature/:新功能开发
- release/:版本发布准备
- hotfix/:生产环境紧急修复
GitHub 流
GitHub 流是一个更简单的工作流:
- 从
main
分支创建功能分支 - 添加提交
- 打开 Pull Request
- 讨论和评审代码
- 部署和测试
- 合并到
main
分支
Git 高级功能
储藏(Stash)
当你需要切换分支但不想提交当前工作时:
bash
# 储藏当前修改
git stash
# 查看储藏列表
git stash list
# 应用最近的储藏
git stash apply
# 应用并删除最近的储藏
git stash pop
# 删除储藏
git stash drop stash@{0}
变基(Rebase)
变基可以让提交历史更加整洁:
bash
# 在当前分支上变基
git rebase master
# 交互式变基
git rebase -i HEAD~3
标签(Tag)
标签通常用于标记发布版本:
bash
# 创建轻量标签
git tag v1.0.0
# 创建附注标签
git tag -a v1.0.0 -m "版本 1.0.0"
# 查看标签
git tag
# 推送标签到远程
git push origin v1.0.0
git push origin --tags
Cherry-pick
从其他分支选择性地应用提交:
bash
git cherry-pick commit-hash
Git 最佳实践
提交信息规范
良好的提交信息格式:
<类型>(<范围>): <简短描述>
<详细描述>
<关闭的问题>
类型可以是:
- feat: 新功能
- fix: 修复 bug
- docs: 文档更新
- style: 代码风格修改
- refactor: 代码重构
- perf: 性能优化
- test: 测试相关
- chore: 构建过程或辅助工具变动
保持提交原子化
每个提交应该表示一个逻辑上完整的更改,不要在一个提交中混合多个不相关的更改。
定期拉取更新
在团队协作中,定期从远程仓库拉取更新可以减少合并冲突:
bash
git pull --rebase origin main
使用 .gitignore
创建 .gitignore
文件来排除不需要版本控制的文件:
# 编译输出
/dist
/build
# 依赖目录
/node_modules
/vendor
# 环境文件
.env
.env.local
# 编辑器配置
.idea/
.vscode/
# 操作系统文件
.DS_Store
Thumbs.db
常见问题解答
如何撤销已推送的提交?
bash
# 创建一个新提交来撤销之前的提交
git revert commit-hash
# 强制推送(谨慎使用)
git reset --hard HEAD~1
git push --force
如何修改提交历史?
bash
# 修改最近的提交
git commit --amend
# 修改多个提交
git rebase -i HEAD~3
如何解决 "refusing to merge unrelated histories" 错误?
bash
git pull origin main --allow-unrelated-histories
如何清理本地分支?
bash
# 删除已合并的分支
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
# 查看哪些远程分支已被删除
git remote prune origin --dry-run
# 清理远程跟踪分支
git remote prune origin
Git 图形化工具
- GitKraken: 跨平台 Git 客户端
- Sourcetree: 免费的 Git 客户端(Windows 和 macOS)
- GitHub Desktop: 简单易用的 Git 客户端
- VS Code: 内置 Git 支持
- GitLens: VS Code 的 Git 增强插件
相关资源
本文档将持续更新,如有问题请通过 GitHub Issues 反馈。