教程摘要

本教程将带你从零开始学习 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 安装
  1. 下载安装包
    • 访问 https://git-scm.com/download/win
    • 下载适合你系统的版本
  2. 运行安装程序
    • 双击安装包
    • 按照向导完成安装
    • 建议使用默认选项
  3. 验证安装
    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 -- 被删文件名

注意:撤销操作有风险,重要文件建议先备份。

典型开发场景实战

多人协作开发流程
  1. 拉取最新代码
    git pull origin main
  2. 新建分支开发
    git checkout -b feature/xxx
  3. 开发、提交
    git add .
    git commit -m "开发 xxx 功能"
  4. 推送分支
    git push origin feature/xxx
  5. 合并到主分支(由管理员或通过 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 流程
  1. Fork 项目
    • 在 GitHub 上 Fork 项目
    • 克隆到本地
  2. 创建分支
    • 创建功能分支
    • 进行开发
  3. 提交更改
    • 提交到远程
    • 创建 Pull Request
  4. 代码审查
    • 等待审查
    • 根据反馈修改
  5. 合并代码
    • 通过审查后合并
    • 删除功能分支
协作最佳实践
  • 经常同步主分支
  • 保持提交信息清晰
  • 及时处理冲突
  • 遵循项目规范

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
  1. 从主分支创建功能分支
  2. 在功能分支上开发
  3. 提交 Pull Request
  4. 审查和讨论
  5. 部署和测试
  6. 合并到主分支

高级操作

交互式变基
# 开始交互式变基
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. 工作流程

日常开发流程

标准工作流程
  1. 更新本地代码
    git checkout main
    git pull origin main
  2. 创建功能分支
    git checkout -b feature/new-feature
  3. 开发新功能
    # 修改文件
    git add .
    git commit -m "Add new feature"
  4. 同步主分支
    git checkout main
    git pull origin main
    git checkout feature/new-feature
    git rebase main
  5. 推送到远程
    git push origin feature/new-feature
工作流程提示
  • 经常同步主分支
  • 保持提交信息清晰
  • 及时处理冲突
  • 遵循项目规范

团队协作流程

代码审查流程
  1. 提交 Pull Request
    • 描述更改内容
    • 关联相关任务
  2. 代码审查
    • 检查代码质量
    • 提供修改建议
  3. 修改代码
    • 根据反馈修改
    • 更新 Pull Request
  4. 合并代码
    • 通过审查后合并
    • 删除功能分支
注意事项
  • 保持分支整洁
  • 及时处理冲突
  • 遵循代码规范
  • 保持良好沟通

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
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐