跳至正文

🌿 什么是Git?

📖 定义

Git是分布式版本控制系统。它跟踪和管理代码变更历史,并使多个开发者能够同时工作。GitHubGitLabBitbucket是托管Git仓库的服务,使协作和代码共享变得容易。

🎯 用类比理解

游戏存档点

将Git比作游戏的存档系统:

  • Commit: 游戏存档 - 保存当前状态
  • Branch: 平行世界 - 在保持主线的同时尝试不同选择
  • Merge: 合并平行世界 - 将好的结果应用到主线
  • Revert: 返回以前的存档 - 犯错时恢复

⚙️ 工作原理

Git的3个区域

Working Directory (工作目录)
↓ git add
Staging Area (暂存区)
↓ git commit
Repository (仓库)
↓ git push
Remote Repository (远程仓库)

Git工作流程

1. 修改文件 (Working Directory)
2. 暂存更改 (Staging Area) → git add
3. 创建提交 (Local Repository) → git commit
4. 推送到远程 (Remote Repository) → git push

💡 实际示例

基本Git命令

# 初始化Git仓库
git init
# 或克隆远程仓库
git clone https://github.com/username/repo.git

# 检查状态
git status

# 暂存更改
git add index.html # 特定文件
git add . # 所有文件

# 创建提交
git commit -m "feat: 添加用户登录"

# 推送(上传)
git push origin main

# 拉取(下载)
git pull origin main

分支操作

# 检查分支
git branch

# 创建新分支
git branch feature-login

# 切换分支
git checkout feature-login
# 或同时创建并切换
git checkout -b feature-login

# 最新方法 (Git 2.23+)
git switch feature-login
git switch -c feature-login

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

# 删除分支
git branch -d feature-login

协作场景

# === 开发者A ===
# 1. 克隆仓库
git clone https://github.com/team/project.git

# 2. 创建新功能分支
git checkout -b feature-payment

# 3. 编写代码并提交
git add .
git commit -m "实现支付功能"

# 4. 推送到远程
git push origin feature-payment

# 5. 在GitHub上创建Pull Request

# === 开发者B ===
# 1. 同步最新代码
git checkout main
git pull origin main

🤔 常见问题

Q1. Git和GitHub有什么区别?

A:

Git (工具)
├─ 版本控制系统(软件)
├─ 在本地计算机上运行
├─ 通过命令行(CLI)使用
└─ 免费、开源

GitHub (服务)
├─ Git仓库托管服务
├─ 基于Web的平台
├─ 协作功能(PR、Issue、Wiki)
└─ 代码共享和开源

类比: Git = 文字处理器, GitHub = Google文档

Q2. 如何写提交消息?

A: 遵循清晰一致的约定:

# ✅ 好的提交消息
git commit -m "feat: 添加用户登录API"
git commit -m "fix: 解决注册按钮点击错误"
git commit -m "refactor: 删除重复代码并分离函数"

# ❌ 不好的提交消息
git commit -m "更新"
git commit -m "修复bug"
git commit -m "正在进行中..."

# Conventional Commits规则
feat: 新功能
fix: 错误修复
docs: 文档变更
style: 代码格式化
refactor: 代码重构
test: 添加测试
chore: 构建、配置变更

Q3. Merge和Rebase的区别?

A:

# Merge
# - 按原样保留分支历史
# - 创建合并提交
git checkout main
git merge feature-login

结果:
A---B---C---D main
\ /
E-----F feature-login

# Rebase
# - 将分支移动到不同的基础上
# - 保持线性历史
git checkout feature-login
git rebase main

结果:
A---B---C---D main
\
E'---F' feature-login

# 何时使用?
Merge: 团队协作、Pull Request
Rebase: 个人分支整理、清晰历史

Q4. 如何解决冲突?

A:

# 发生冲突
git merge feature-login
# CONFLICT (content): Merge conflict in index.html

# 检查冲突文件
git status

# 打开文件手动解决
# <h1>最终标题</h1>

# 标记为已解决
git add index.html
git commit -m "Merge branch 'feature-login' - 解决标题冲突"

# 如需取消合并
git merge --abort

🎬 总结

Git是现代开发的必备工具:

  • 版本控制: 跟踪所有变更历史
  • 协作: 多个开发者同时工作
  • 分支: 安全的实验和功能开发
  • 恢复: 随时返回以前的状态

掌握Git可以自信地管理代码并与团队高效协作! 🌿✨