Appearance
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 和 developGitHub 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 自动化
└── 定期合并主分支