Skip to content

Git 基础

Git 是目前世界上最流行的分布式版本控制系统,本教程将帮助你掌握 Git 的基本概念和日常使用技巧。

Git 简介

Git 是由 Linux 之父 Linus Torvalds 在 2005 年创建的分布式版本控制系统。与集中式版本控制系统(如 SVN)不同,Git 允许每个开发者在本地拥有完整的代码仓库副本,不需要持续连接到中央服务器。

Git 的主要特点

  • 分布式架构:每个开发者都拥有完整的代码历史
  • 高性能:即使对大型项目也能快速操作
  • 数据完整性:使用 SHA-1 哈希确保数据完整性
  • 分支管理:轻量级的分支创建和合并
  • 灵活的工作流:支持多种开发工作流程
  • 开源免费:遵循 GNU 通用公共许可证

安装 Git

Windows

  1. 访问 Git 官网 下载安装程序
  2. 运行安装程序,按照向导完成安装
  3. 安装完成后,可以通过命令提示符或 Git Bash 使用 Git

macOS

  1. 使用 Homebrew 安装:
    bash
    brew install git
  2. 或访问 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

解决合并冲突

当两个分支修改了同一个文件的同一部分时,合并时会产生冲突:

  1. Git 会在文件中标记冲突区域:

    <<<<<<< HEAD
    当前分支的内容
    =======
    要合并的分支内容
    >>>>>>> branch-name
  2. 手动编辑文件解决冲突

  3. 添加解决后的文件到暂存区:git add filename.txt

  4. 完成合并提交: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 工作流

功能分支工作流

  1. 从主分支创建功能分支:git checkout -b feature-x
  2. 在功能分支上开发并提交
  3. 完成后合并回主分支:
    bash
    git checkout main
    git merge feature-x
  4. 删除功能分支:git branch -d feature-x

Gitflow 工作流

Gitflow 是一个更结构化的分支模型,包含以下分支类型:

  • master:稳定的生产代码
  • develop:开发分支
  • feature/:新功能开发
  • release/:版本发布准备
  • hotfix/:生产环境紧急修复

GitHub 流

GitHub 流是一个更简单的工作流:

  1. main 分支创建功能分支
  2. 添加提交
  3. 打开 Pull Request
  4. 讨论和评审代码
  5. 部署和测试
  6. 合并到 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 反馈。

vitepress开发指南