Skip to content

Git 操作思维导图

Git 核心概念

Git
├── 工作区
├── 暂存区
├── 本地仓库
└── 远程仓库

Git 基本操作

初始化与配置

初始化与配置
├── git init              # 初始化仓库
├── git clone             # 克隆仓库
├── git config            # 配置 Git
│   ├── --global          # 全局配置
│   ├── --local           # 局部配置
│   └── --system          # 系统配置
└── git config --list     # 查看配置

文件操作

文件操作
├── git add               # 添加到暂存区
│   ├── .                 # 添加当前目录
│   ├── -A                # 添加所有文件
│   ├── -u                # 添加已跟踪文件
│   └── -i                # 交互式添加
├── git rm                # 删除文件
│   ├── --cached          # 从暂存区删除
│   └── -r                # 递归删除
├── git mv                # 移动/重命名文件
└── git status            # 查看状态

提交操作

提交操作
├── git commit            # 提交更改
│   ├── -m                # 提交信息
│   ├── -am               # 添加并提交
│   ├── --amend           # 修改最后一次提交
│   └── --no-verify       # 跳过钩子
└── git commit -a         # 提交所有更改

查看与比较

查看历史

查看历史
├── git log               # 查看提交历史
│   ├── --oneline         # 单行显示
│   ├── --graph           # 图形化显示
│   ├── --all             # 所有分支
│   ├── --author=         # 按作者筛选
│   ├── --since=          # 按时间筛选
│   └── -n                # 显示最近 n 条
├── git show              # 查看提交详情
├── git reflog            # 查看引用日志
└── git blame             # 查看文件修改者

比较差异

比较差异
├── git diff              # 查看差异
│   ├── --cached          # 暂存区 vs 仓库
│   ├── HEAD              # 工作区 vs 仓库
│   ├── <commit1> <commit2>  # 两次提交比较
│   └── <file>            # 指定文件
└── git difftool          # 使用差异工具

分支管理

分支操作

分支操作
├── git branch            # 分支管理
│   ├── <branch>          # 创建分支
│   ├── -d                # 删除分支
│   ├── -D                # 强制删除
│   ├── -m                # 重命名
│   ├── -a                # 查看所有分支
│   ├── -r                # 查看远程分支
│   └── -v                # 查看详细信息
├── git checkout          # 切换分支
│   ├── <branch>          # 切换到分支
│   ├── -b <branch>       # 创建并切换
│   └── -- <file>         # 恢复文件
└── git switch            # 切换分支(新命令)
    ├── <branch>          # 切换到分支
    └── -c <branch>       # 创建并切换

分支合并

分支合并
├── git merge             # 合并分支
│   ├── <branch>          # 合并指定分支
│   ├── --no-ff           # 不使用快进
│   ├── --no-commit       # 合并但不提交
│   ├── --squash          # 压缩合并
│   └── --abort           # 终止合并
└── git rebase            # 变基操作
    ├── <branch>          # 变基到指定分支
    ├── -i                # 交互式变基
    ├── --continue        # 继续变基
    ├── --skip            # 跳过当前提交
    └── --abort           # 终止变基

远程操作

远程仓库管理

远程仓库管理
├── git remote            # 远程仓库管理
│   ├── -v                # 查看详细信息
│   ├── add               # 添加远程仓库
│   ├── remove            # 删除远程仓库
│   ├── rename            # 重命名远程仓库
│   └── set-url           # 修改远程仓库 URL
├── git clone             # 克隆远程仓库
│   ├── --depth           # 浅克隆
│   ├── --branch          # 克隆指定分支
│   └── --single-branch   # 单分支克隆
└── git submodule         # 子模块管理
    ├── add               # 添加子模块
    ├── init              # 初始化子模块
    ├── update            # 更新子模块
    └── foreach           # 对所有子模块执行命令

推送与拉取

推送与拉取
├── git push              # 推送到远程
│   ├── <remote> <branch> # 推送指定分支
│   ├── --all             # 推送所有分支
│   ├── --tags            # 推送所有标签
│   ├── -u                # 设置上游分支
│   ├── --force           # 强制推送
│   ├── --delete          # 删除远程分支
│   └── --dry-run         # 模拟推送
├── git pull              # 拉取并合并
│   ├── --rebase          # 拉取并变基
│   ├── --no-rebase       # 拉取并合并
│   └── --ff-only         # 只允许快进
└── git fetch             # 获取远程更新
    ├── --all             # 获取所有远程分支
    ├── --prune           # 清理已删除的远程分支
    └── <remote>          # 获取指定远程仓库

标签管理

标签操作

标签操作
├── git tag               # 标签管理
│   ├── <tag>             # 创建轻量标签
│   ├── -a <tag>          # 创建附注标签
│   ├── -m                # 标签信息
│   ├── -d                # 删除标签
│   ├── -l                # 列出标签
│   └── <commit>          # 为指定提交打标签
└── git push              # 推送标签
    ├── <remote> <tag>    # 推送指定标签
    └── --tags            # 推送所有标签

撤销与恢复

撤销操作

撤销操作
├── git reset             # 重置
│   ├── --soft            # 软重置(保留更改)
│   ├── --mixed           # 混合重置(默认)
│   ├── --hard            # 硬重置(丢弃更改)
│   └── HEAD~n            # 重置到 n 次提交前
├── git revert            # 反向提交
│   ├── <commit>          # 撤销指定提交
│   ├── -n                # 撤销但不提交
│   └── --no-commit       # 撤销但不提交
├── git checkout          # 恢复文件
│   ├── -- <file>         # 恢复文件
│   └── <commit> -- <file>  # 从指定提交恢复
└── git restore           # 恢复文件(新命令)
    ├── <file>            # 恢复工作区文件
    ├── --staged <file>   # 恢复暂存区文件
    └── --source <commit> <file>  # 从指定提交恢复

储藏操作

储藏操作
├── git stash             # 储藏当前工作
│   ├── save              # 储藏并添加说明
│   ├── -u                # 储藏未跟踪文件
│   ├── -a                # 储藏所有文件
│   ├── list              # 查看储藏列表
│   ├── show              # 查看储藏内容
│   ├── apply             # 应用储藏
│   ├── pop               # 应用并删除储藏
│   ├── drop              # 删除储藏
│   ├── branch            # 从储藏创建分支
│   └── clear             # 清除所有储藏
└── git cherry-pick       # 挑选提交
    ├── <commit>          # 挑选指定提交
    ├── -n                # 挑选但不提交
    └── --continue        # 继续挑选

清理与优化

仓库维护

仓库维护
├── git clean             # 清理未跟踪文件
│   ├── -n                # 查看将要删除的文件
│   ├── -f                # 强制删除
│   ├── -d                # 删除目录
│   ├── -fd               # 删除文件和目录
│   ├── -x                # 删除忽略的文件
│   └── -X                # 只删除忽略的文件
├── git gc                # 垃圾回收
│   ├── --aggressive      # 深度优化
│   └── --prune=          # 设置过期时间
├── git prune             # 清理不可达对象
├── git fsck              # 检查仓库完整性
└── git repack            # 重新打包对象

查找与搜索

搜索操作

搜索操作
├── git grep              # 在代码中搜索
│   ├── -i                # 忽略大小写
│   ├── -n                # 显示行号
│   ├── -c                # 显示匹配数
│   └── --and             # 逻辑与
├── git log               # 在提交历史中搜索
│   ├── --grep=           # 搜索提交信息
│   ├── --author=         # 按作者搜索
│   ├── --since=          --until=  # 按时间搜索
│   └── --all-match       # 匹配所有条件
└── git bisect            # 二分查找
    ├── start             # 开始二分查找
    ├── bad               # 标记为坏提交
    ├── good              # 标记为好提交
    ├── skip              # 跳过当前提交
    └── reset             # 重置二分查找

工作流

Git Flow

Git Flow 工作流
├── master                # 主分支(生产环境)
├── develop               # 开发分支
├── feature/*             # 功能分支
│   ├── 从 develop 创建
│   └── 合并回 develop
├── release/*             # 发布分支
│   ├── 从 develop 创建
│   └── 合并到 master 和 develop
└── hotfix/*              # 修复分支
    ├── 从 master 创建
    └── 合并到 master 和 develop

GitHub Flow

GitHub Flow 工作流
├── main                  # 主分支
├── feature/*             # 功能分支
│   ├── 从 main 创建
│   ├── 创建 Pull Request
│   └── 合并回 main
└── 部署
    └── main 分支始终可部署

GitLab Flow

GitLab Flow 工作流
├── main                  # 主分支
├── production            # 生产环境分支
├── staging               # 预发布环境分支
├── feature/*             # 功能分支
└── 环境分支
    └── 通过合并请求升级

常用命令速查

日常开发

日常开发
├── git pull              # 拉取最新代码
├── git checkout -b feature/new-feature  # 创建功能分支
├── git add .             # 添加所有更改
├── git commit -m "msg"   # 提交更改
├── git push -u origin feature/new-feature  # 推送到远程
├── 创建 Pull Request     # 代码审查
├── 合并到主分支          # 合并代码
└── git branch -d feature/new-feature  # 删除分支

紧急修复

紧急修复
├── git checkout -b hotfix/fix  # 创建修复分支
├── 修复问题              # 修改代码
├── git add .             # 添加更改
├── git commit -m "fix"   # 提交修复
├── git checkout main     # 切换到主分支
├── git merge hotfix/fix  # 合并修复
├── git push origin main  # 推送到远程
└── git branch -d hotfix/fix  # 删除修复分支

版本发布

版本发布
├── git checkout -b release/v1.0.0  # 创建发布分支
├── 版本测试              # 测试版本
├── git checkout main     # 切换到主分支
├── git merge release/v1.0.0  # 合并发布
├── git tag -a v1.0.0 -m "Release v1.0.0"  # 创建标签
├── git push origin main  # 推送主分支
├── git push origin v1.0.0  # 推送标签
└── git branch -d release/v1.0.0  # 删除发布分支

配置文件

.gitignore

.gitignore 规则
├── # 注释
├── *.log                # 忽略所有 .log 文件
├── /node_modules        # 忽略根目录的 node_modules
├── build/               # 忽略 build 目录
├── !important.log       # 不忽略 important.log
├── *.log                # 忽略所有 .log 文件
├── !debug.log           # 但不忽略 debug.log
└── **/temp              # 忽略任意目录下的 temp

.gitattributes

.gitattributes 配置
├── *.txt text            # 文本文件
├── *.jpg binary          # 二进制文件
├── *.sh eol=lf           # Unix 换行符
├── *.bat eol=crlf        # Windows 换行符
└── * text=auto           # 自动检测

常见问题解决

冲突解决

冲突解决流程
├── git merge <branch>    # 尝试合并
├── 查看冲突文件          # git status
├── 编辑冲突文件          # 手动解决冲突
├── git add <file>        # 标记为已解决
├── git commit            # 完成合并
└── git merge --abort     # 放弃合并

撤销操作

撤销操作流程
├── 撤销工作区修改        # git checkout -- <file>
├── 撤销暂存区修改        # git reset HEAD <file>
├── 撤销提交              # git reset --soft HEAD~1
├── 修改最后一次提交      # git commit --amend
└── 撤销已推送提交        # git revert <commit>

恢复丢失提交

恢复丢失提交流程
├── git reflog            # 查看引用日志
├── 找到丢失提交的哈希    # 记录 commit hash
├── git checkout <hash>   # 恢复到该提交
├── git branch <branch>   # 创建新分支
└── 继续开发              # 正常开发

性能优化

大文件处理

大文件处理
├── Git LFS              # 大文件存储
│   ├── git lfs install  # 安装 LFS
│   ├── git lfs track    # 跟踪大文件
│   └── git lfs migrate  # 迁移现有文件
├── git filter-branch    # 过滤历史
├── git filter-repo      # 更好的过滤工具
└── BFG Repo-Cleaner     # 清理工具

仓库优化

仓库优化
├── git gc               # 垃圾回收
├── git gc --aggressive  # 深度优化
├── git prune            # 清理不可达对象
├── git repack           # 重新打包
└── git fsck             # 检查完整性

安全与权限

SSH 配置

SSH 配置
├── 生成 SSH 密钥        # ssh-keygen
├── 查看公钥             # cat ~/.ssh/id_rsa.pub
├── 添加到 GitHub/GitLab # 复制公钥到平台
├── 测试连接             # ssh -T git@github.com
└── 配置多个 SSH 密钥    # ~/.ssh/config

访问控制

访问控制
├── 分支保护             # 保护重要分支
├── 代码审查             # Pull Request 审查
├── CI/CD 检查           # 自动化测试
├── 权限管理             # 团队成员权限
└── 签名验证             # GPG 签名提交

工具集成

GUI 工具

GUI 工具
├── GitKraken            # 跨平台 Git 客户端
├── SourceTree           # Atlassian 的 Git 客户端
├── GitHub Desktop       # GitHub 官方客户端
├── Git Extensions       # Windows Git 工具
├── TortoiseGit          # Windows 资源管理器集成
└── SmartGit             # 商业 Git 客户端

命令行工具

命令行工具
├── gitk                 # Git 图形化历史查看器
├── tig                  # 文本模式 Git 界面
├── lazygit              # 终端 Git UI
├── gh                   # GitHub 命令行工具
├── glab                 # GitLab 命令行工具
└── gitui                # 终端 Git 界面

最佳实践

提交规范

提交规范
├── feat: 新功能
├── fix: 修复 bug
├── docs: 文档更新
├── style: 代码格式
├── refactor: 重构
├── test: 测试
├── chore: 构建/工具
└── perf: 性能优化

分支命名

分支命名规范
├── feature/xxx          # 功能分支
├── bugfix/xxx           # 修复分支
├── hotfix/xxx           # 紧急修复
├── release/xxx          # 发布分支
├── experiment/xxx       # 实验分支
└── xxx/yyy              # 其他类型

工作流程

推荐工作流程
├── 保持主分支稳定
├── 使用功能分支开发
├── 频繁提交小改动
├── 编写清晰的提交信息
├── 进行代码审查
├── 使用 CI/CD 自动化
└── 定期合并主分支

基于 VitePress 的本地知识库