Git 概念与用法完整说明

文档定位:面向软件开发、运维自动化、科研协作与团队工程实践,系统说明 Git 的核心概念、内部机制、常用命令与协作规范。
使用方式:先阅读“快速导航”和“目录”,再按场景跳转到对应章节。


快速导航


目录

  1. Git 概念与用法完整说明
    1. 快速导航
    2. 目录
    3. 第一部分:概念基础与系统定位
      1. 01 Git 的定义与系统定位
      2. 02 Git 的核心能力与适用范围
      3. 03 Git 与其他版本控制方式的本质区别
      4. 04 Git 的分布式架构特征
    4. 第二部分:内部模型与核心机制
      1. 05 Git 的数据模型
      2. 06 Git 对象:blob、tree、commit、tag
      3. 07 提交图与历史结构
      4. 08 引用系统:HEAD、branch、tag、remote-tracking branch
      5. 09 Git 的四个工作区域
      6. 10 文件状态模型与状态迁移
    5. 第三部分:环境准备与仓库建立
      1. 11 安装与版本验证
      2. 11A Git 下载与环境配置(跨平台)
      3. 11B 国内网络环境下载与加速配置
        1. 1) 下载与安装建议
        2. 2) 协议选择建议(HTTPS vs SSH)
        3. 3) 代理配置(按需启用)
        4. 4) SSH 连接检查与优化
        5. 5) SSL 证书与安全提醒
        6. 6) 最小排障流程(推荐顺序)
      4. 11C 版本验证
      5. 12 用户身份与基础环境配置
      6. 13 仓库初始化:git init
      7. 14 远程仓库克隆:git clone
      8. 15 配置层级与仓库元数据结构
    6. 第四部分:本地版本控制操作
      1. 16 状态检查与信息读取
      2. 17 内容加入暂存区:git add
      3. 18 创建提交:git commit
      4. 19 差异比较:git diff
      5. 20 历史查看:git log、git show、git blame
    7. 第五部分:分支、合并与历史整合
      1. 21 分支的定义与实现原理
      2. 22 分支创建、切换与删除
      3. 23 合并机制:fast-forward 与 three-way merge
      4. 24 冲突的成因、识别与处理
      5. 25 变基:git rebase 的原理与用途
      6. 26 merge 与 rebase 的适用边界
    8. 第六部分:远程协作与同步机制
      1. 27 远程仓库与远程引用
      2. 28 获取更新:git fetch
      3. 29 同步更新:git pull
      4. 30 推送更新:git push
      5. 31 上游分支、跟踪关系与协作约束
    9. 第七部分:历史修改、撤销与恢复
      1. 32 文件级恢复:git restore
      2. 33 历史回退:git reset
      3. 34 公开历史撤销:git revert
      4. 35 引用恢复:git reflog
      5. 36 提交修订:git commit —amend
      6. 37 历史改写的风险与控制原则
    10. 第八部分:辅助机制与工程工具
      1. 38 暂存工作现场:git stash
      2. 39 版本标记:git tag
      3. 40 忽略规则:.gitignore
      4. 41 子模块:git submodule
      5. 42 远程地址与认证配置
    11. 第九部分:工程实践与协作规范
      1. 43 提交粒度与提交说明规范
      2. 44 分支命名与生命周期管理
      3. 45 常见团队工作流
      4. 46 冲突预防与协作注意事项
      5. 47 典型错误与处理方法
      6. 48 Git 最佳实践
    12. 第十部分:命令速查
      1. 49 高频命令速查
    13. 第十一部分:进阶实战专题
      1. 50 精准摘取提交:git cherry-pick
      2. 51 二分查找坏提交:git bisect
      3. 52 多工作树并行开发:git worktree
      4. 53 自动化与冲突复用:git hooks 与 git rerere
      5. 54 提交签名、可信历史与 blame 降噪
      6. 55 Pull Request 协作流程与分支保护
    14. 附录
      1. 附录 A:撤销与恢复命令对照
      2. 附录 B:merge / rebase / cherry-pick / revert 决策说明
      3. 附录 C:.gitignore 常用模板补充
      4. 附录 D:推荐 Git 配置模板
      5. 附录 E:常见故障排查清单
    15. 结语

第一部分:概念基础与系统定位

01 Git 的定义与系统定位

Git 是一种分布式版本控制系统(DVCS),用于记录项目内容在时间维度上的演化过程,并支持多人并行开发、审查、回退、同步与发布。

Git 不是文件备份工具,也不只是代码同步工具。它本质上是“内容历史管理系统”,核心职责是:

  • 记录项目内容状态
  • 建立可追溯变更历史
  • 支持并行开发线路隔离与整合
  • 支持本地与远程仓库的同步
  • 支持恢复、修订与发布

02 Git 的核心能力与适用范围

核心能力:

  • 历史记录能力:以提交为单位定位、比较与恢复历史
  • 并行开发能力:分支隔离不同任务
  • 合并整合能力:自动合并与冲突定位
  • 分布式协作能力:本地仓库具备完整历史
  • 可恢复与可审计能力:通过 reset、restore、revert、reflog 处理误操作

适用范围:

  • 软件开发与团队协作
  • 运维脚本与基础设施代码
  • 科研项目、课程项目版本管理
  • 需要审计与可追溯性的文档工程

03 Git 与其他版本控制方式的本质区别

与手工备份式版本管理相比,Git 具备:

  • 连续历史
  • 自动差异比较
  • 并行开发表达能力
  • 结构化协作能力

与集中式版本控制(如 SVN)相比,Git 具备:

  • 本地完整历史
  • 离线可用
  • 分支与合并成本更低
  • 不依赖唯一中心节点

04 Git 的分布式架构特征

“分布式”意味着每个仓库副本都包含完整对象数据库与历史引用。

直接结果:

  1. 本地操作快(多数命令无需网络)
  2. 容错性高(不依赖唯一服务器)
  3. 分支实验成本低
  4. 协作更灵活,但需要更严格规范

第二部分:内部模型与核心机制

05 Git 的数据模型

Git 的核心是“对象数据库 + 引用系统”,不是“目录 + 命令集合”。

逻辑实体包括:

  • 文件内容对象
  • 目录结构对象
  • 提交对象
  • 标签对象
  • 指向这些对象的引用

提交历史本质是有向无环图(DAG)。多数 Git 操作本质上只有两类:

  • 创建新对象
  • 更新或移动引用

06 Git 对象:blob、tree、commit、tag

  • blob:保存文件内容,不保存文件名和路径
  • tree:保存目录结构与名称映射
  • commit:保存快照指针、父提交、作者、时间与提交说明
  • tag:为对象(通常是提交)提供稳定名称

标签分为:

  • 轻量标签:简单引用
  • 附注标签:独立对象,带作者、时间与说明

07 提交图与历史结构

Git 历史不是线性列表,而是提交图:

  • 普通提交:单父节点
  • 分支分叉:从某提交分出新开发线
  • 合并提交:常见双父节点

图结构支持共同祖先分析、三方合并、历史重放与复杂协作模型。

08 引用系统:HEAD、branch、tag、remote-tracking branch

  • branch:可移动引用,指向某条开发线最新提交
  • HEAD:当前检出位置(通常指向当前分支)
  • tag:通常不可移动,用于发布点标记
  • remote-tracking branch:远程状态在本地的镜像(如 origin/main)

09 Git 的四个工作区域

  1. 工作区(Working Directory):实际编辑文件的目录
  2. 暂存区(Staging Area / Index):下一次提交候选内容
  3. 本地仓库(Local Repository):对象与历史存储(.git)
  4. 远程仓库(Remote Repository):协作同步与备份节点

10 文件状态模型与状态迁移

常见状态:

  • Untracked(未跟踪)
  • Tracked / Unmodified(已跟踪未修改)
  • Modified(已修改未暂存)
  • Staged(已暂存)

典型路径:

Untracked -> Staged -> Tracked/Unmodified -> Modified -> Staged


第三部分:环境准备与仓库建立

11 安装与版本验证

11A Git 下载与环境配置(跨平台)

本节目标:确保你不仅“安装了 Git”,还完成了可用的命令行环境配置(尤其是 PATH)。

下载建议:

  • Windows:从 Git for Windows 官方发布页下载安装包
  • macOS:优先使用 Homebrew,或安装 Xcode Command Line Tools
  • Linux:使用发行版官方包管理器安装

常用安装命令:

Windows(winget):

winget install --id Git.Git -e --source winget

macOS(Homebrew):

brew install git

Ubuntu / Debian:

sudo apt update
sudo apt install -y git

CentOS / RHEL / Rocky:

sudo dnf install -y git

安装后检查:

git --version

若提示“command not found”或“不是内部或外部命令”,通常是 PATH 未配置好。可按以下方式排查:

  1. 先确认 Git 可执行文件位置
which git

Windows PowerShell 可用:

Get-Command git
  1. 检查 PATH 是否包含 Git 安装目录
  2. 修改 PATH 后重启终端,再执行 git --version

常见建议:

  • Windows 安装向导中,建议选择“Git from the command line and also from 3rd-party software”
  • macOS/Linux 若存在多版本 Git,使用 which git 确认当前生效路径
  • 团队文档中固定最低版本要求,避免行为差异

11B 国内网络环境下载与加速配置

在网络受限或连接不稳定场景下,建议优先解决“下载源、协议选择、代理与证书”四个问题。

1) 下载与安装建议

  • Git 安装包优先使用官方发布页与可信镜像站,避免来历不明的二次打包版本
  • 包管理器(wingetbrewaptdnf)通常比手工下载更稳定、可维护

2) 协议选择建议(HTTPS vs SSH)

  • 首次接入建议先用 HTTPS,配置更快
  • 长期开发建议切换 SSH,减少重复凭证输入

验证远程可达性:

git ls-remote <repository-url>

若该命令超时或失败,优先检查网络、代理与 DNS,而不是先改 Git 命令本身。

3) 代理配置(按需启用)

设置 HTTP/HTTPS 代理:

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

取消代理:

git config --global --unset http.proxy
git config --global --unset https.proxy

查看当前代理配置:

git config --global --get http.proxy
git config --global --get https.proxy

4) SSH 连接检查与优化

生成密钥(如未生成):

ssh-keygen -t ed25519 -C "your_email@example.com"

测试连接:

ssh -T git@github.com

若 22 端口受限,可尝试基于 443 的 SSH 方案(依平台支持情况配置 ~/.ssh/config)。

5) SSL 证书与安全提醒

  • 遇到证书问题应优先修复系统证书链或企业代理证书
  • 不建议长期使用关闭 SSL 校验的方式

不推荐长期使用(仅临时排障):

git config --global http.sslVerify false

排障后务必恢复:

git config --global http.sslVerify true

6) 最小排障流程(推荐顺序)

  1. git --version(确认安装)

  2. which git(确认生效路径)

  3. git config -l --show-origin(确认是否有异常代理/证书配置)

  4. git ls-remote <repository-url>(验证连通性)

  5. 仍失败时,再切换协议或检查代理与 DNS

11C 版本验证

git --version

团队协作中建议统一版本区间,避免默认行为差异(例如默认分支名、rebase/merge 默认策略、凭证支持方式)。

12 用户身份与基础环境配置

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"

配置层级:

  • system(系统级)
  • global(用户级)
  • local(仓库级)

优先级:local > global > system

常用配置:

git config --global core.editor "code --wait"
git config --global color.ui auto

跨平台换行建议:

  • Windows:
git config --global core.autocrlf true
  • Linux / macOS:
git config --global core.autocrlf input

13 仓库初始化:git init

git init

适用场景:

  • 从零创建项目
  • 将已有目录纳入 Git 管理
  • 本地实验仓库

14 远程仓库克隆:git clone

git clone <repository-url>

常用参数:

git clone --depth=1 <repository-url>
git clone --branch <branch-name> <repository-url>
git clone --recursive <repository-url>

15 配置层级与仓库元数据结构

典型 .git 目录结构:

  • objects/:对象数据库
  • refs/:引用目录
  • HEAD:当前检出引用
  • config:仓库配置
  • index:暂存区索引
  • logs/:引用变动日志
  • hooks/:钩子脚本目录

第四部分:本地版本控制操作

16 状态检查与信息读取

git status
git status -s
git branch -a
git branch -vv
git remote -v

高频实践:每次提交、合并、推送前先看一次状态。

17 内容加入暂存区:git add

git add file.txt
git add .
git add -A
git add -p

重点:git add 是“选择下一次提交内容”,不是“直接提交”。

18 创建提交:git commit

git commit -m "message"

高质量提交应满足:

  • 主题明确
  • 边界清晰
  • 可独立理解
  • 可单独回退

修订最近一次提交:

git commit --amend

19 差异比较:git diff

git diff
git diff --cached
git diff <commit1> <commit2>
git diff main feature/login
  • git diff:工作区 vs 暂存区
  • git diff —cached:暂存区 vs 最近提交

20 历史查看:git log、git show、git blame

git log
git log --oneline --graph --decorate --all
git show <commit-id>
git blame file.txt

第五部分:分支、合并与历史整合

21 分支的定义与实现原理

分支是“指向提交的可移动引用”,不是目录副本。
这也是 Git 分支轻量、切换快、可高频创建删除的根本原因。

22 分支创建、切换与删除

git branch feature/login
git switch -c feature/login
git checkout -b feature/login
git switch main
git branch -d feature/login
git branch -D feature/login
git push origin --delete feature/login

23 合并机制:fast-forward 与 three-way merge

  • fast-forward:目标分支无额外提交,仅前移引用
  • three-way merge:双方都前进时,基于共同祖先进行三方整合,通常产生 merge commit

24 冲突的成因、识别与处理

标准处理流程:

  1. git status 定位冲突文件
  2. 手工整合文本并删除冲突标记
  3. git add 标记冲突已解决
  4. 继续 merge / rebase / commit 流程

原则:按语义整合,不做机械“选左或选右”。

25 变基:git rebase 的原理与用途

rebase 的核心是“将提交序列重放到新基底”,因此会改写历史。

适用场景:

  • 整理个人分支历史
  • 合并前清理提交序列
  • 让功能分支跟上最新主线

26 merge 与 rebase 的适用边界

  • 公开共享历史:优先 merge 或 revert
  • 个人未共享历史:可使用 rebase 整理
  • 是否允许主干 rebase:由团队统一约定

第六部分:远程协作与同步机制

27 远程仓库与远程引用

  • 本地分支:可提交、可修改(如 main)
  • 远程跟踪分支:远程状态本地镜像(如 origin/main)

28 获取更新:git fetch

git fetch

特点:只更新远程跟踪分支,不改当前工作区和当前本地分支。适合“先看再整合”。

29 同步更新:git pull

git pull

通常等价于:

git fetch
git merge

若启用 rebase 策略,则可能表现为 fetch + rebase。

30 推送更新:git push

git push
git push -u origin main

非 fast-forward 被拒绝时,先确认原因,再决定 fetch / merge / rebase。
强推优先使用:

git push --force-with-lease

31 上游分支、跟踪关系与协作约束

git branch -vv

建立上游关系后,pull/push/status 的默认行为更明确,可减少误操作。


第七部分:历史修改、撤销与恢复

32 文件级恢复:git restore

git restore file.txt
git restore --staged file.txt
git restore --source=<commit-id> file.txt

33 历史回退:git reset

git reset --soft HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1
  • —soft:回退提交,保留暂存区和工作区
  • —mixed:回退提交与暂存区,保留工作区
  • —hard:回退提交、暂存区、工作区(高风险)

34 公开历史撤销:git revert

git revert <commit-id>

revert 通过“新增反向提交”撤销历史效果,不改写已有历史,适合公共分支。

35 引用恢复:git reflog

git reflog

误 reset、误 rebase、误 checkout 后,通常可通过 reflog 找回旧引用。

36 提交修订:git commit —amend

git commit --amend

用于修正最近一次提交说明或补交遗漏内容。它会改写最近一次提交。

37 历史改写的风险与控制原则

高风险操作包括:

  • commit —amend
  • rebase
  • reset
  • push —force

控制原则:

  1. 本地个人历史可整理
  2. 已共享历史不随意改写
  3. 主干分支改写需强约束
  4. 公共撤销优先 revert
  5. 强推优先 —force-with-lease

第八部分:辅助机制与工程工具

38 暂存工作现场:git stash

git stash
git stash push -m "WIP: login page"
git stash list
git stash pop
git stash apply
  • pop:恢复并删除记录
  • apply:恢复但保留记录

39 版本标记:git tag

git tag v1.0.0
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0
git push origin --tags

40 忽略规则:.gitignore

示例:

node_modules/
dist/
build/
*.log
.env
.vscode/
.DS_Store

注意:.gitignore 仅对“未跟踪文件”生效。已跟踪文件需先执行 git rm —cached。

41 子模块:git submodule

git submodule add <repo-url> <path>
git submodule update --init --recursive

适合“独立仓库依赖且需锁定版本”的场景,不适合替代普通目录结构。

42 远程地址与认证配置

常见协议:HTTPS、SSH。

git remote -v
git remote set-url origin <new-url>

第九部分:工程实践与协作规范

43 提交粒度与提交说明规范

提交粒度建议:

  • 一个提交只做一件事
  • 不混入无关改动
  • 可独立审查与回滚

提交说明建议:

  • 避免:update、modify、fix bugs
  • 推荐:Add request timeout handling
  • 推荐:Fix duplicate primary key in order service
  • 推荐:Refactor auth middleware initialization

44 分支命名与生命周期管理

命名示例:

  • feature/user-login
  • bugfix/payment-timeout
  • hotfix/prod-null-pointer
  • release/v1.2.0
  • docs/api-guide

生命周期建议:

  1. 从稳定基线创建
  2. 在分支内完成特定任务
  3. 审查通过后合并
  4. 合并后删除无用分支

45 常见团队工作流

  • Feature Branch Workflow:大多数团队适用
  • Git Flow:流程严格、发布节奏明确
  • Trunk-Based Development:短分支、小步合并、高频集成

46 冲突预防与协作注意事项

  • 高频同步主线
  • 功能分支短生命周期
  • 避免多人长期修改同一核心文件
  • 合并前审查 diff
  • 大规模重构提前沟通

47 典型错误与处理方法

  1. 临时文件误提交
  • 更新 .gitignore
  • 对已跟踪文件执行 git rm —cached
  • 重新提交
  1. 最近一次提交信息或内容有误
git commit --amend
  1. 已共享提交需要撤销
git revert <commit-id>
  1. 误执行 reset —hard
git reflog
  1. 推送被拒绝

先确认:远程是否前进、是否受分支保护、是否历史被改写、是否权限不足。

48 Git 最佳实践

  1. 高频使用 status/diff/log 理解当前状态
  2. 小步提交,减少混杂提交
  3. 不在主分支直接做复杂开发
  4. 共享历史谨慎改写
  5. 公共撤销优先 revert
  6. 项目早期建立 .gitignore
  7. 高风险操作前先确认引用与差异
  8. 把 Git 当作“历史系统”而不是“同步工具”

第十部分:命令速查

49 高频命令速查

仓库建立:

git init
git clone <repo-url>

状态与信息:

git status
git status -s
git branch -a
git branch -vv
git remote -v

暂存与提交:

git add <file>
git add .
git add -A
git add -p
git commit -m "message"
git commit --amend

差异与历史:

git diff
git diff --cached
git log
git log --oneline --graph --decorate --all
git show <commit-id>
git blame <file>

分支与合并:

git switch <branch>
git switch -c <branch>
git merge <branch>
git rebase <branch>
git branch -d <branch>

远程同步:

git fetch
git pull
git push
git push -u origin <branch>

撤销与恢复:

git restore <file>
git restore --staged <file>
git reset --soft HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1
git revert <commit-id>
git reflog

辅助功能:

git stash
git stash list
git stash pop
git tag
git tag -a v1.0.0 -m "release"
git push origin --tags
git submodule update --init --recursive

第十一部分:进阶实战专题

50 精准摘取提交:git cherry-pick

cherry-pick 用于把“某一个或某几个提交”的变更效果复制到当前分支,而不是合并整条分支。

常见场景:

  • 线上热修复需要从开发分支挑一个补丁
  • 发布分支只需要吸收某个 bugfix
  • 多分支并行时临时同步单个修复

基本用法:

git cherry-pick <commit-id>
git cherry-pick <commit-a> <commit-b>
git cherry-pick <start-commit>^..<end-commit>

冲突处理:

git cherry-pick --continue
git cherry-pick --abort

注意事项:

  • cherry-pick 会创建新提交,哈希与原提交不同
  • 不适合大量连续历史迁移,批量迁移更适合 merge/rebase

51 二分查找坏提交:git bisect

bisect 可以在“好版本”和“坏版本”之间做二分搜索,用最少步骤定位引入问题的提交。

基础流程:

git bisect start
git bisect bad
git bisect good <good-commit-id>

之后 Git 会自动切到中间提交,你在每一步执行测试并标记:

git bisect good
git bisect bad

完成后回到原分支:

git bisect reset

自动化测试模式(推荐):

git bisect start
git bisect bad
git bisect good <good-commit-id>
git bisect run <test-script>
git bisect reset

52 多工作树并行开发:git worktree

worktree 允许同一仓库在不同目录检出不同分支,适合并行处理多个任务。

常见场景:

  • 一边修复线上 bug,一边保持主任务开发
  • 评审他人分支时不打断当前工作目录

常用命令:

git worktree list
git worktree add ../repo-hotfix hotfix/login-crash
git worktree remove ../repo-hotfix

实践建议:

  • 目录命名包含分支语义,如 repo-hotfixrepo-review
  • 用完及时 remove,避免旧工作树长期堆积

53 自动化与冲突复用:git hooks 与 git rerere

hooks 是 Git 在特定时机触发的脚本机制,常用于质量闸门。

典型钩子:

  • pre-commit:提交前执行格式化、lint、基础测试
  • commit-msg:校验提交信息格式
  • pre-push:推送前执行关键测试

rerere(reuse recorded resolution)用于复用历史冲突解决结果。

开启方式:

git config --global rerere.enabled true

适用场景:

  • 长周期分支反复 rebase/merge 时,降低重复冲突处理成本

54 提交签名、可信历史与 blame 降噪

对于安全要求较高的团队,建议启用提交签名(GPG 或 SSH 签名)来提升提交可信度。

同时,建议在大规模格式化提交后使用“忽略修订”减少 blame 噪声:

git blame --ignore-revs-file .git-blame-ignore-revs <file>

典型做法:

  1. 把“纯格式化提交”写入 .git-blame-ignore-revs
  2. 评审与定位责任时默认启用 ignore-revs

这能显著提高代码追溯的可读性与准确性。

55 Pull Request 协作流程与分支保护

推荐协作流程:

  1. 从主干拉出短生命周期功能分支
  2. 本地自检(格式化、测试、静态检查)
  3. 推送并创建 Pull Request
  4. 通过自动化检查与人工评审
  5. 选择团队约定的合并策略(merge/rebase/squash)
  6. 合并后删除功能分支

分支保护建议:

  • 禁止直接推送主干
  • 必须通过 CI
  • 至少 1 名 reviewer 批准
  • 对关键仓库限制 force push

常见合并策略建议:

  • 注重完整历史:使用 merge commit
  • 注重线性历史:使用 rebase merge
  • 注重主干整洁:使用 squash merge

附录

附录 A:撤销与恢复命令对照

按作用对象快速区分:

  • git switch:切换分支
  • git restore:恢复文件/暂存状态
  • git checkout:旧式复合命令(语义过载)
  • git reset:移动分支引用,可能影响暂存区与工作区
  • git revert:新增反向提交,不改写已有历史

典型场景:

  1. 丢弃工作区单文件改动
git restore file.txt
  1. 取消暂存但保留工作区改动
git restore --staged file.txt
  1. 切换分支
git switch main
  1. 撤回最近一次提交但保留内容
git reset --mixed HEAD~1
  1. 撤销已推送提交
git revert <commit-id>
  1. 临时查看历史提交
git checkout <commit-id>

若要继续开发,请新建分支:

git switch -c temp-branch

风险等级(低 -> 高):

switch -> restore -> checkout(视用途)-> revert -> reset —soft -> reset —mixed -> reset —hard

附录 B:merge / rebase / cherry-pick / revert 决策说明

  • merge:整合整条分支,保留分叉历史,不改写已有提交
  • rebase:整理个人分支历史,保持线性,但会改写提交
  • cherry-pick:仅挑选单个提交到当前分支
  • revert:安全撤销公共历史中的某次提交

选择口诀:

  • 整条整合不改历史,用 merge
  • 整理个人分支历史,用 rebase
  • 只要一个补丁,用 cherry-pick
  • 公共分支做撤销,用 revert

附录 C:.gitignore 常用模板补充

通用模板:

# OS
.DS_Store
Thumbs.db

# Editors
.vscode/
.idea/

# Logs
*.log

# Env
.env
.env.local

# Temporary
tmp/
temp/
*.tmp

Rust:

target/
Cargo.lock
**/*.rs.bk

Go:

bin/
dist/
coverage.out
vendor/
*.test

LaTeX:

*.aux
*.log
*.out
*.toc
*.synctex.gz
*.fls
*.fdb_latexmk

前端(Node.js / pnpm / yarn):

node_modules/
dist/
coverage/
.npm/
.pnpm-store/
.yarn/
.next/
.nuxt/
vite.svg

Python 数据与实验工程:

__pycache__/
*.pyc
.venv/
.env
.ipynb_checkpoints/
.mypy_cache/
.pytest_cache/
dist/
build/

附录 D:推荐 Git 配置模板

以下模板适合作为个人开发环境起点,可按团队规范调整。

# 身份
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

# 默认行为
git config --global init.defaultBranch main
git config --global pull.rebase false
git config --global fetch.prune true

# 可读性
git config --global color.ui auto
git config --global core.editor "code --wait"

# 冲突复用
git config --global rerere.enabled true

常用 alias 示例:

git config --global alias.st "status -sb"
git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.co "checkout"
git config --global alias.sw "switch"
git config --global alias.br "branch -vv"

说明:alias 要简短、稳定、低歧义,团队共享时应统一文档。

附录 E:常见故障排查清单

  1. git pull 后出现大量冲突
  • 先执行 git status 确认冲突文件
  • git log --oneline --graph --decorate --all 理解分叉点
  • 视情况改为先 fetch 再手动 merge/rebase
  1. git push 被拒绝(non-fast-forward)
  • 执行 git fetch
  • 检查 git branch -vv
  • 再选择 merge 或 rebase
  1. 误删分支后找不到提交
  • 先查 git reflog
  • 找到提交后 git switch -c recover-branch <commit-id>
  1. 工作区很乱又不想立即提交
  • 临时保存:git stash push -m "WIP: <topic>"
  • 处理完中断任务后:git stash pop
  1. 合并后发现引入回归
  • 公共分支优先 git revert <merge-commit-id>
  • 私有分支再考虑 reset/rebase 重整
  1. blame 信息被格式化提交污染
  • 使用 --ignore-revs-file
  • 维护 .git-blame-ignore-revs

结语

系统学习 Git 的关键,不在于机械记忆命令,而在于建立对象模型、引用系统、状态迁移和协作约束的整体认知。
当你能够回答“当前在哪个引用上、改动在什么状态、历史该不该改写、如何安全与团队协作”这四个问题时,Git 就会从“命令集合”升级为你的工程基础设施。