Git 完全教程 - 从小白到大神
Git教程摘要:本教程系统讲解Git版本控制工具,内容涵盖基础概念、安装配置、日常操作、分支管理、远程协作等核心知识点。教程通过实例演示Git三大区域(工作区/暂存区/版本库)的操作流程,详细说明常用命令如add/commit/push/pull的使用场景,并介绍分支策略、冲突解决等团队协作技巧。特别包含GitFlow工作流、交互式变基等高级功能,以及.gitignore配置、撤销操作等实用技能。
·
教程摘要
本教程将带你从零开始学习 Git,通过大量实例和最佳实践,帮助你掌握版本控制技能。内容包括:
- Git 基础概念和安装配置
- 日常操作和分支管理
- 远程仓库协作
- 高级特性和工作流程
- 常见问题解决方案
每个部分都包含详细的示例和练习,帮助你快速掌握 Git 的使用。
1. Git 简介
什么是 Git?
Git 是一个分布式版本控制系统,它可以:
- 跟踪文件的变化
- 记录修改历史
- 支持多人协作
- 管理项目版本
Git 的核心概念
工作区、暂存区和仓库
- 工作区(Working Directory)
- 你正在编辑的文件
- 可以直接修改的文件
- 暂存区(Staging Area)
- 准备提交的文件
- 使用 git add 添加文件
- 仓库(Repository)
- 已提交的文件
- 使用 git commit 提交
文件状态变化示例
# 1. 修改文件(工作区)
echo "Hello Git" > hello.txt
# 2. 添加到暂存区
git add hello.txt
# 3. 提交到仓库
git commit -m "Add hello.txt"
Git 的优势
- 分布式架构
- 每个开发者都有完整的代码副本
- 可以离线工作
- 更安全可靠
- 强大的分支功能
- 快速创建和切换分支
- 方便进行功能开发
- 支持并行开发
- 完整的历史记录
- 记录每次修改
- 可以回退到任意版本
- 追踪代码变更
2. 安装配置
安装 Git
Windows 安装
- 下载安装包
- 访问 https://git-scm.com/download/win
- 下载适合你系统的版本
- 运行安装程序
- 双击安装包
- 按照向导完成安装
- 建议使用默认选项
- 验证安装
git --version
Linux 安装
# Ubuntu/Debian
sudo apt update
sudo apt install git
# CentOS/RHEL
sudo yum install git
# Arch Linux
sudo pacman -S git
macOS 安装
# 使用 Homebrew
brew install git
# 或下载安装包
# 访问 https://git-scm.com/download/mac
基本配置
用户信息配置
# 设置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 查看配置
git config --list
常用配置项
# 设置默认编辑器
git config --global core.editor "vim"
# 设置默认分支名
git config --global init.defaultBranch main
# 设置换行符处理
git config --global core.autocrlf input # Linux/macOS
git config --global core.autocrlf true # Windows
配置提示
- 使用 --global 设置全局配置
- 使用 --local 设置项目配置
- 配置文件位置:
- 全局:~/.gitconfig
- 项目:.git/config
3. 基础操作
核心概念与结构图解
Git 的三大区域:
- 工作区(Working Directory):你实际编辑文件的地方。
- 暂存区(Staging Area/Index):准备提交的快照。
- 版本库(Repository):已提交的历史记录。
工作区 --(git add)--> 暂存区 --(git commit)--> 版本库
常用命令详解
查看状态
git status
显示当前文件的状态(未跟踪、已修改、已暂存等)。
建议:每次操作前后都用 git status 检查当前状态。
查看更改内容
git diff # 查看工作区与暂存区的差异
git diff --cached # 查看暂存区与版本库的差异
帮助你了解具体改动了哪些内容。
查看历史记录
git log # 查看详细历史
git log --oneline # 简洁模式
git log --graph # 图形化分支历史
git log -p # 显示每次提交的具体改动
文件的增删改查
新建文件并提交
echo "内容" > file.txt # 新建文件
git add file.txt # 添加到暂存区
git commit -m "添加 file.txt" # 提交到版本库
修改文件
vim file.txt # 编辑文件
git diff file.txt # 查看修改内容
git add file.txt # 暂存修改
git commit -m "修改 file.txt"
删除文件
git rm file.txt # 删除并暂存
git commit -m "删除 file.txt"
重命名/移动文件
git mv old.txt new.txt # 移动或重命名
git commit -m "重命名 old.txt 为 new.txt"
.gitignore 的使用
忽略不需要纳入版本控制的文件
# 编辑 .gitignore 文件
*.log
__pycache__/
*.tmp
.DS_Store
将不需要跟踪的文件或目录写入 .gitignore,Git 会自动忽略它们。
撤销与恢复操作
撤销工作区的修改
git checkout -- file.txt # 恢复为上次提交的内容
撤销暂存区的修改
git reset HEAD file.txt # 取消暂存,回到工作区
撤销最近一次提交(保留更改)
git reset --soft HEAD^
恢复误删文件
git checkout -- 被删文件名
注意:撤销操作有风险,重要文件建议先备份。
典型开发场景实战
多人协作开发流程
- 拉取最新代码
git pull origin main - 新建分支开发
git checkout -b feature/xxx - 开发、提交
git add . git commit -m "开发 xxx 功能" - 推送分支
git push origin feature/xxx - 合并到主分支(由管理员或通过 Pull Request)
git checkout main git pull origin main git merge feature/xxx
实用小技巧
- 用
git log --oneline --graph --all直观查看分支结构 - 用
git add -p按块选择性暂存更改 - 用
git commit --amend修改上一次提交信息 - 用
git reflog找回丢失的提交 - 用
git clean -fd清理未跟踪文件和目录
4. 分支管理
分支基础
创建和切换分支
# 创建新分支
git branch feature-login
# 切换到新分支
git checkout feature-login
# 创建并切换(简写)
git checkout -b feature-login
# 查看所有分支
git branch
合并分支
# 切换到主分支
git checkout main
# 合并分支
git merge feature-login
# 删除分支
git branch -d feature-login
分支操作示例
# 1. 创建功能分支
git checkout -b feature-user
# 2. 修改文件
echo "def create_user():" > user.py
echo " pass" >> user.py
# 3. 提交更改
git add user.py
git commit -m "Add user creation function"
# 4. 切换回主分支
git checkout main
# 5. 合并功能分支
git merge feature-user
# 6. 删除功能分支
git branch -d feature-user
分支策略
常见分支类型
- 主分支(main/master)
- 稳定的代码版本
- 用于发布
- 开发分支(develop)
- 开发中的代码
- 集成功能分支
- 功能分支(feature/*)
- 新功能开发
- 临时分支
- 修复分支(hotfix/*)
- 紧急bug修复
- 从主分支创建
分支命名规范
- feature/功能名
- bugfix/问题描述
- hotfix/紧急修复
- release/版本号
5. 远程仓库
远程仓库操作
添加远程仓库
# 添加远程仓库
git remote add origin https://github.com/username/repo.git
# 查看远程仓库
git remote -v
# 修改远程仓库
git remote set-url origin new-url
# 删除远程仓库
git remote remove origin
推送和拉取
# 推送到远程
git push origin main
# 拉取更新
git pull origin main
# 获取远程信息
git fetch origin
远程协作示例
# 1. 克隆远程仓库
git clone https://github.com/username/repo.git
# 2. 创建功能分支
git checkout -b feature-new
# 3. 修改并提交
echo "New feature" > feature.txt
git add feature.txt
git commit -m "Add new feature"
# 4. 推送到远程
git push origin feature-new
# 5. 获取远程更新
git pull origin main
# 6. 解决冲突(如果有)
# 编辑冲突文件
git add .
git commit -m "Resolve conflicts"
# 7. 再次推送
git push origin feature-new
协作工作流
Pull Request 流程
- Fork 项目
- 在 GitHub 上 Fork 项目
- 克隆到本地
- 创建分支
- 创建功能分支
- 进行开发
- 提交更改
- 提交到远程
- 创建 Pull Request
- 代码审查
- 等待审查
- 根据反馈修改
- 合并代码
- 通过审查后合并
- 删除功能分支
协作最佳实践
- 经常同步主分支
- 保持提交信息清晰
- 及时处理冲突
- 遵循项目规范
6. 高级技巧
Git 工作流
Git Flow
# 初始化 Git Flow
git flow init
# 开始新功能
git flow feature start login
# 完成功能
git flow feature finish login
# 开始发布
git flow release start 1.0.0
# 完成发布
git flow release finish 1.0.0
# 开始热修复
git flow hotfix start bug-fix
# 完成热修复
git flow hotfix finish bug-fix
GitHub Flow
- 从主分支创建功能分支
- 在功能分支上开发
- 提交 Pull Request
- 审查和讨论
- 部署和测试
- 合并到主分支
高级操作
交互式变基
# 开始交互式变基
git rebase -i HEAD~3
# 编辑提交信息
git commit --amend
# 合并多个提交
git rebase -i HEAD~3
# 在编辑器中修改 pick 为 squash
暂存更改
# 暂存当前更改
git stash
# 查看暂存列表
git stash list
# 应用暂存
git stash apply
# 删除暂存
git stash drop
高级操作示例
# 1. 暂存当前工作
git stash
# 2. 切换到其他分支
git checkout hotfix
# 3. 修复问题
echo "Fix bug" > fix.txt
git add fix.txt
git commit -m "Fix critical bug"
# 4. 返回原分支
git checkout feature
# 5. 恢复工作
git stash pop
# 6. 整理提交历史
git rebase -i HEAD~3
7. 工作流程
日常开发流程
标准工作流程
- 更新本地代码
git checkout main git pull origin main - 创建功能分支
git checkout -b feature/new-feature - 开发新功能
# 修改文件 git add . git commit -m "Add new feature" - 同步主分支
git checkout main git pull origin main git checkout feature/new-feature git rebase main - 推送到远程
git push origin feature/new-feature
工作流程提示
- 经常同步主分支
- 保持提交信息清晰
- 及时处理冲突
- 遵循项目规范
团队协作流程
代码审查流程
- 提交 Pull Request
- 描述更改内容
- 关联相关任务
- 代码审查
- 检查代码质量
- 提供修改建议
- 修改代码
- 根据反馈修改
- 更新 Pull Request
- 合并代码
- 通过审查后合并
- 删除功能分支
注意事项
- 保持分支整洁
- 及时处理冲突
- 遵循代码规范
- 保持良好沟通
8. 故障排除
常见问题
提交问题
# 撤销最后一次提交
git reset --soft HEAD^
# 修改提交信息
git commit --amend
# 撤销已推送的提交
git revert HEAD
分支问题
# 恢复误删的分支
git reflog
git checkout -b branch-name commit-hash
# 强制更新分支
git push -f origin branch-name
# 清理已合并分支
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
问题解决示例
# 1. 误删文件
git checkout -- deleted-file.txt
# 2. 提交到错误分支
git reset --soft HEAD^
git checkout correct-branch
git commit -m "Add feature"
# 3. 解决合并冲突
# 编辑冲突文件
git add .
git commit -m "Resolve conflicts"
最佳实践
日常维护
- 定期清理
- 删除已合并分支
- 清理临时文件
- 压缩仓库
- 备份策略
- 定期推送到远程
- 保持多个备份
- 使用 .gitignore
- 性能优化
- 使用浅克隆
- 定期垃圾回收
- 优化大文件
维护命令
# 清理未跟踪文件
git clean -fd
# 压缩仓库
git gc
# 优化仓库
git prune
# 检查仓库状态
git fsck
9. 常见问题FAQ
Q1: git pull 和 git fetch 有什么区别?
git fetch 只会拉取远程更新到本地但不会自动合并,git pull 会拉取并自动合并到当前分支。
Q2: 如何撤销已经 push 的提交?
可以用 git revert 生成一个反向提交,或用 git reset --hard 回退后强推(慎用)。
Q3: 合并分支时出现冲突怎么办?
手动编辑冲突文件,解决后 git add,再 git commit 完成合并。
Q4: 如何配置 SSH key 免密推送?
ssh-keygen -t ed25519 -C "your@email.com"
# 将生成的公钥内容添加到 GitHub/Gitee 账户的 SSH keys
# 测试连接:
ssh -T git@github.com
Q5: clone/pull 时提示权限不足?
检查远程仓库地址、SSH key 配置,或用 HTTPS 方式并输入正确账号密码。
10. 术语解释
- Repository(仓库):存放项目代码和历史记录的地方。
- Working Directory(工作区):你实际编辑文件的本地目录。
- Staging Area(暂存区):准备提交的快照。
- Commit(提交):一次保存快照的操作。
- Branch(分支):代码开发的独立线索。
- Merge(合并):将不同分支的内容整合到一起。
- Rebase(变基):将一组提交"移动"到另一分支之上。
- Remote(远程):托管在服务器上的仓库。
- Origin:默认的远程仓库名。
- HEAD:当前检出的提交指针。
- Stash(暂存/贮藏):临时保存当前未提交的更改。
- Tag(标签):为某次提交打上标记,常用于发布版本。
- Conflict(冲突):合并时同一文件的同一位置被不同分支修改,需手动解决。
11. 命令速查表
| 操作 | 命令 |
|---|---|
| 初始化仓库 | git init |
| 克隆仓库 | git clone url |
| 查看状态 | git status |
| 查看历史 | git log |
| 添加到暂存区 | git add 文件 |
| 提交更改 | git commit -m "说明" |
| 推送到远程 | git push origin 分支 |
| 拉取远程 | git pull origin 分支 |
| 创建分支 | git branch 新分支 |
| 切换分支 | git checkout 分支 |
| 合并分支 | git merge 分支 |
| 删除分支 | git branch -d 分支 |
| 查看远程 | git remote -v |
| 添加远程 | git remote add 名称 url |
| 暂存当前更改 | git stash |
| 应用暂存更改 | git stash apply |
| 查看分支图 | git log --oneline --graph --all |
更多推荐



所有评论(0)