
肖哥弹架构 跟大家“弹弹” Git 设计与实战应用,需要代码关注
欢迎 关注,点赞,留言。
关注公号Solomon肖哥弹架构获取更多精彩内容
历史热点文章
还在为代码冲突、分支混乱和提交历史一团糟而头疼?这份 Git 终极指南 将彻底改变你的开发体验!从零基础到高阶技巧,覆盖 仓库管理、分支策略、高效协作、撤销回退、标签发布 等核心场景,搭配 清晰图解 + 实战命令,让你轻松玩转 Git!
🔥 为什么你需要这份指南?
✔ 告别 Git 恐惧症:从 git init
到 git rebase
,手把手教你每一步!
✔ 团队协作无忧:掌握 fetch
、pull
、push
的正确姿势,避免代码灾难!
✔ 高级操作揭秘:用 bisect
快速定位 Bug,用 cherry-pick
精准移植提交!
✔ 效率翻倍技巧:别名配置、钩子脚本、垃圾回收,让你的 Git 快到飞起!
1、Git 核心架构分层

1. 工作区(Working Directory)
- 作用:用户直接编辑的目录
- 特点:
- 包含
.git
子目录(仓库本体)
- 文件状态分为:未跟踪/已修改/已暂存
2. 暂存区(Staging Area / Index)
- 作用:临时存储即将提交的变更
- 底层实现:
- 二进制文件
.git/index
记录文件快照
- 存储文件的 SHA-1 哈希、时间戳和路径
3. 本地仓库(Local Repository)
- 组成:
- 对象数据库
.git/objects/
- 引用数据库
.git/refs/
- 持久化存储所有版本数据
4. 远程仓库(Remote Repository)
2、仓库初始化与克隆

命令 |
作用 |
示例 |
git init |
初始化新仓库 |
git init my-project |
git clone |
克隆远程仓库 |
git clone https://github.com/user/repo.git |
git remote add |
添加远程仓库 |
git remote add origin https://github.com/user/repo.git |
2.0 典型工作流

2.1. git init
- 初始化新仓库
2.1.1 作用
- 将当前目录转换为 Git 仓库,创建
.git
子目录(存储所有版本控制数据)
- 本质:生成 Git 的对象数据库、引用数据库和基础配置文件
2.1.2 示例
git init
git init my-project
执行后目录结构:
my-project/
└── .git/ # Git核心数据库
├── objects/ # 存储所有Git对象
├── refs/ # 存储分支和标签引用
└── HEAD # 指向当前分支
2.1.3 使用场景
- 从零开始一个新项目
- 将现有非Git项目纳入版本控制
- 注意:初始化后需手动添加文件(
git add
)和提交(git commit
)
2.2. git clone
- 克隆远程仓库
2.2.1 作用
- 完整复制远程仓库到本地(包括历史记录、分支和配置)
- 自动完成:
- 创建远程跟踪分支(如
origin/main
)
- 设置默认上游分支
2.2.2 示例
git clone https://github.com/user/repo.git
git clone https://github.com/user/repo.git my-local-folder
git clone -b develop https://github.com/user/repo.git
2.2.3 高级用法
git clone --depth 1 https://github.com/user/repo.git
git clone --recursive https://github.com/user/repo.git
2.2.4 使用场景
- 获取开源项目代码
- 加入团队项目开发
- 需要快速获取项目历史(无需从头
init
+ 手动添加远程)
2.3. git remote add
- 添加远程仓库
2.3.1 作用
- 为本地仓库关联一个远程仓库(通常命名为
origin
)
- 关键点:
- 本地仓库可关联多个远程仓库
- 远程地址支持 HTTPS/SSH 协议
2.3.2 示例
git remote add origin https://github.com/user/repo.git
git remote add teammate https://github.com/teammate/repo.git
2.3.3 查看与管理远程仓库
git remote -v
git remote remove origin
git remote set-url origin git@github.com:user/repo.git
2.3.4 使用场景
3、基础工作流
3.0 流程图
3.0.1 Git 工作区状态流转图

3.0.2 完整工作流

3.1. 文件状态管理
命令 |
作用 |
示例 |
git status |
查看工作区状态 |
git status -s (简洁模式) |
git add |
添加文件到暂存区 |
git add file.txt git add . (添加所有) |
git restore |
撤销工作区修改 |
git restore file.txt |
git restore --staged |
撤销暂存区修改 |
git restore --staged file.txt |
git rm |
删除文件并暂存 |
git rm file.txt |
1. git status
- 查看工作区状态
1.1 作用
- 显示工作目录和暂存区的当前状态
- 标识以下文件状态:
- 未跟踪(Untracked):新文件未被 Git 管理
- 已修改(Modified):文件内容发生变化
- 已暂存(Staged):修改已添加到暂存区
1.2 示例
git status
git status -s
简洁模式输出符号说明:
?? 新文件未跟踪
A 新增到暂存区
M 文件已修改
M 工作区修改未暂存
M 暂存区修改未提交
D 文件已删除
1.3 使用场景
- 提交代码前检查哪些文件有变更
- 解决合并冲突后确认文件状态
- 快速查看当前分支与远程的同步状态
2. git add
- 添加文件到暂存区
2.1 作用
- 将工作区的修改添加到暂存区(Stage)
- 本质是将文件当前状态生成快照(Blob对象)
2.2 示例
git add README.md
git add .
git add -p
交互模式操作选项:
y - 暂存当前区块
n - 跳过当前区块
s - 分割区块
e - 手动编辑区块
2.3 使用场景
- 准备提交前选择要包含的修改
- 分多次提交时选择性暂存文件
- 恢复误删文件(
git add
已删除文件等同于 git rm
)
3. git restore
- 撤销工作区修改
3.1 作用
- 撤销工作目录中的修改(恢复到暂存区或最近提交的状态)
- 替代旧版
git checkout -- <file>
命令
3.2 示例
git restore file.txt
git restore .
git restore --staged file.txt
3.3 使用场景
- 丢弃实验性代码修改
- 取消误操作导致的文件变更
- 恢复被错误覆盖的文件
4. git rm
- 删除文件并暂存
4.1 作用
- 从工作区和暂存区同时删除文件
- 等效于手动删除文件后执行
git add
4.2 示例
git rm old_file.txt
git rm --cached log.txt
git rm -f locked_file.txt
4.3 使用场景
- 从版本控制中移除不需要的文件
- 将文件移出 Git 管理但保留本地文件(
.gitignore
忘记添加时补救)
- 清理大型二进制文件以减小仓库体积
5. 典型工作流示例
echo "新功能代码" >> feature.py
git status -s
git add feature.py
git restore --staged feature.py
git add feature.py
git commit -m "添加新功能"
6. 命令对比总结
命令 |
影响范围 |
常用场景 |
危险等级 |
git status |
只读 |
查看变更 |
安全 |
git add |
工作区 → 暂存区 |
准备提交 |
中等(可恢复) |
git restore |
撤销工作区/暂存区修改 |
回退变更 |
高危(不可逆) |
git rm |
删除工作区+暂存区文件 |
清理文件 |
高危(需确认) |
3.2. 提交变更
命令 |
作用 |
示例 |
git commit |
提交变更 |
git commit -m "fix: 修复登录bug" |
git commit --amend |
修改最后一次提交 |
git commit --amend --no-edit (不修改消息) |
1. git commit
- 提交变更到本地仓库
1.1 作用
- 将暂存区(Staging Area) 的变更永久记录到本地仓库
- 生成一个新的Commit 对象,包含:
- 当前暂存区的文件快照(Tree 对象)
- 父提交指针(形成版本历史链)
- 提交者信息(取自
user.name
和 user.email
)
- 提交消息(Commit Message)
1.2 示例
git commit -m "fix: 修复登录页面的空指针异常"
git commit --amend -m "fix: 修复登录逻辑和样式问题"
git commit -a -m "chore: 优化代码格式"
git commit -S -m "feat: 新增支付功能"
1.3 使用场景
- 常规提交:完成一个功能或修复后,提交代码到本地仓库
- 修正提交:发现漏改文件或提交信息错误时,使用
--amend
修补
- 紧急修复:使用
-a
快速提交已跟踪文件的变更(适合紧急补丁)
- 规范提交:遵循
Conventional Commits
规范(如 feat:
、fix:
)
1.4 注意事项
--amend
会修改提交历史,若已推送远程需强制更新(git push --force
)
-a
不会自动提交新文件(未 git add
的文件仍需手动添加)
- 提交信息应清晰明确,便于后续代码审查和版本回溯
4、分支管理

命令 |
作用 |
示例 |
git branch |
查看/创建分支 |
git branch feature-login |
git checkout |
切换分支 |
git checkout main |
git switch |
(新版) 切换分支 |
git switch feature-login |
git merge |
合并分支 |
git merge feature-login |
git rebase |
变基分支 |
git rebase main |
git branch -d |
删除分支 |
git branch -d feature-old |
4.0 实践流程图

4.1. git branch
- 查看/创建分支
4.1.1 作用
- 查看分支:列出所有本地分支(当前分支前带
*
标记)
- 创建分支:基于当前提交新建分支(不自动切换)
4.1.2 示例
git branch
git branch feature-payment
git branch -r
git branch -a
4.1.3 使用场景
- 开发新功能前创建独立分支
- 修复 Bug 时创建临时分支
- 查看当前仓库分支结构
4.2. git checkout
- 切换分支
4.2.1 作用
- 切换到指定分支(更新工作目录文件)
- 可基于远程分支创建本地分支
4.2.2 示例
git checkout main
git checkout -b feature-search
git checkout -b hotfix origin/hotfix
4.2.3 注意事项
- 切换前需提交或暂存当前修改(否则会提示冲突)
- 旧版 Git 中也可用于恢复文件(新版推荐用
git restore
)
4.3. git switch
- (新版) 切换分支
4.3.1 作用
- 专用于分支切换的命令(Git 2.23+ 引入)
- 比
checkout
更语义化,降低误操作风险
4.3.2 示例
git switch main
git switch -c feature-auth
4.3.3 与 checkout 的区别
命令 |
推荐用途 |
可替代旧命令 |
git switch |
仅分支切换 |
git checkout <branch> |
git restore |
仅文件恢复 |
git checkout -- <file> |
4.4. git merge
- 合并分支
4.4.1 作用
- 将指定分支的变更合并到当前分支
- 生成一个新的合并提交(Merge Commit)
4.4.2 示例
git merge feature-login
git merge --no-ff feature-login
4.4.3 合并策略
- 快进合并(Fast-forward) :当目标分支是当前分支的直接后继时
- 三方合并:当分支出现分叉时需解决冲突
4.4.4 使用场景
- 功能开发完成后合并到主分支
- 同步其他成员的修改到本地分支
4.5. git rebase
- 变基分支
4.5.1 作用
- 将当前分支的提交"移植"到目标分支最新提交之后
- 可生成更线性的提交历史
4.5.2 示例
git rebase main
git rebase -i HEAD~3
4.5.3 与 merge 的区别
|
merge |
rebase |
历史记录 |
保留分支结构 |
线性历史 |
冲突处理 |
最后解决一次 |
可能需多次解决 |
适用场景 |
公共分支合并 |
本地分支整理 |
4.5.4 注意事项
4.6. git branch -d
- 删除分支
4.6.1 作用
- 删除已合并的分支(安全删除)
-D
强制删除未合并分支
4.6.2 示例
git branch -d feature-old
git branch -D experiment
4.6.3 使用场景
4.6 命令对比总结
命令 |
影响范围 |
常用场景 |
危险等级 |
git branch |
本地分支列表/创建 |
查看分支结构、创建新分支 |
安全 |
git checkout |
切换分支/恢复文件 |
旧版Git环境操作 |
中(文件操作风险) |
git switch |
仅分支切换 |
新版专用分支切换(Git 2.23+) |
安全 |
git merge |
合并分支历史 |
公共分支合并(保留完整历史) |
中(可能冲突) |
git rebase |
重写分支提交历史 |
整理本地提交(线性历史) |
高(改写历史) |
git branch -d |
删除已合并分支 |
清理完成的分支 |
中(需确认合并) |
git branch -D |
强制删除未合并分支 |
紧急清理废弃分支 |
高(数据丢失) |
5、远程协作

命令 |
作用 |
示例 |
git fetch |
获取远程更新 |
git fetch origin |
git pull |
拉取并合并远程变更 |
git pull origin main |
git push |
推送本地提交 |
git push origin feature-login |
git push -u |
首次推送并关联分支 |
git push -u origin main |
git remote -v |
查看远程仓库 |
git remote -v |
5.0 典型协作场景图示

5.1. git fetch
- 获取远程更新
5.1.1 作用
- 从远程仓库下载所有分支的最新提交、文件和引用(不会自动合并)
- 更新本地仓库中的远程跟踪分支(如
origin/main
)
5.1.2 示例
git fetch
git fetch origin
git fetch origin feature-bugfix
5.1.3 使用场景
- 查看团队成员的新提交(不立即合并到本地分支)
- 同步远程分支信息(如新建的远程分支)
- 安全检查:先
fetch
查看变更,再决定是否合并
5.1.4 与 git pull
的区别
命令 |
是否修改工作区 |
是否自动合并 |
适用场景 |
fetch |
否 |
否 |
安全查看远程变更 |
pull |
是 |
是 |
快速同步最新代码 |
5.2. git pull
- 拉取并合并远程变更
5.2.1 作用
- 相当于
git fetch
+ git merge
(默认行为)
- 将远程分支的变更合并到当前本地分支
5.2.2 示例
git pull
git pull origin main
git pull --rebase origin main
5.2.3 常见问题处理
git merge --abort
git rebase --abort
5.2.4 使用场景
5.3. git push
- 推送本地提交
5.3.1 作用
5.3.2 示例
git push origin feature-login
git push --force origin main
git push --force-with-lease origin main
5.3.3 推送规则
5.3.4 使用场景
- 本地开发完成后分享代码
- 同步本地修复到远程仓库
- 注意:强制推送前确保团队协调
5.4. git push -u
- 首次推送并关联分支
5.4.1 作用
- 首次推送分支时建立跟踪关系(upstream)
- 后续可直接用
git push
无需指定远程分支
5.4.2 示例
git push -u origin main
git push
5.4.3 原理
5.4.4 使用场景
5.5. git remote -v
- 查看远程仓库
5.5.1 作用
- 显示所有已配置的远程仓库及其URL
-v
参数显示详细地址(verbose)
5.5.2 示例
git remote -v
5.5.3 扩展操作
git remote add upstream git@github.com:other/repo.git
git remote set-url origin git@new-url.com/repo.git
git remote remove upstream
5.5.4 使用场景
- 检查是否已正确配置远程仓库
- 需要切换仓库协议时(如HTTPS转SSH)
- 开源项目贡献时添加上游仓库
5.6 远程协作命令对比总结
命令 |
影响范围 |
常用场景 |
危险等级 |
同步方向 |
git fetch |
仅更新本地远程分支指针 |
安全查看远程变更 |
安全 |
远程 → 本地 |
git pull |
更新远程分支 + 合并到当前分支 |
快速同步团队代码 |
中(可能冲突) |
远程 → 本地 |
git push |
上传本地分支到远程 |
分享代码/提交PR |
中(需权限) |
本地 → 远程 |
git push -u |
首次推送 + 建立分支关联 |
新分支首次推送 |
低 |
本地 → 远程 |
git remote -v |
只读查看远程地址 |
检查仓库关联配置 |
安全 |
无数据同步 |
6、查看历史
命令 |
作用 |
示例 |
git log |
查看提交历史 |
git log --oneline --graph |
git show |
查看某次提交 |
git show abc123 |
git diff |
比较差异 |
git diff HEAD~1 (与上一次提交比较) |
6.1. git log
- 查看提交历史
6.1.1 作用
- 显示当前分支的提交历史(按时间倒序排列)
- 可查看提交哈希、作者、日期和提交信息
6.1.2 常用参数组合
git log --oneline --graph
git log -3
git log --stat
git log --author="John"
git log --since="2023-01-01" --until="2023-12-31"
git log --grep="修复登录"
6.1.3 典型输出示例
* 1a2b3cd (HEAD -> main) feat: 新增支付接口
| * 4e5f6gh (feature/login) fix: 修复登录跳转
|/
* 0b23a3d chore: 初始化项目
6.1.4 使用场景
- 追溯代码变更历史
- 排查特定功能引入时间
- 准备发布时生成变更日志(CHANGELOG)
6.2. git show
- 查看提交详情
6.2.1 作用
- 显示特定提交的完整信息:
- 元数据(作者、时间、提交信息)
- 文件变更内容(diff)
6.2.2. 示例用法
git show
git show abc123
git show abc123 --stat
git show abc123:src/index.js
6.2.3 输出解析
commit abc123...
Author: Alice <alice@example.com>
Date: Mon Jan 1 12:00:00 2023 +0800
fix: 修复空指针异常
diff --git a/src/main.js b/src/main.js
index 1a2b3c..4d5e6f 100644
--- a/src/main.js
+++ b/src/main.js
@@ -10,6 +10,7 @@
- return null;
+ return defaultValue;
6.2.4 使用场景
- 审查代码变更细节
- 恢复被删除的文件内容
- 学习优秀项目的提交规范
6.3. git diff
- 比较差异
6.3.1 作用
- 比较工作区、暂存区、仓库版本之间的差异
- 支持文件/提交/分支间的对比
6.3.2 常用对比模式
git diff
git diff --staged
git diff HEAD
git diff abc123 xyz789
git diff main..feature
git diff --name-only
6.3.3 输出解读
- 删除的行(旧内容)
+ 新增的行(新内容)
@@ 定位变更位置(语法:@@ -旧文件行号 +新文件行号 @@)
6.3.4 使用场景
6.4 三命令对比总结
命令 |
核心用途 |
最佳适用场景 |
git log |
宏观历史查看 |
追溯变更脉络 |
git show |
微观提交分析 |
审查具体修改 |
git diff |
差异对比 |
代码变更检查 |
7、撤销与回退

命令 |
作用 |
示例 |
git reset |
回退提交 |
git reset --soft HEAD~1 (保留更改) |
git revert |
创建反向提交 |
git revert abc123 |
git stash |
暂存临时修改 |
git stash pop (恢复暂存) |
7.0 典型场景流程图

7.1. git reset
- 回退提交
7.1.1 作用原理
- 移动当前分支的
HEAD
指针到指定提交,有三种模式:
模式 |
影响范围 |
适用场景 |
--soft |
只移动 HEAD 指针 |
修改提交历史 |
--mixed (默认) |
移动 HEAD + 重置暂存区 |
撤销 git add |
--hard |
移动 HEAD + 重置工作区 |
彻底丢弃更改 |
7.1.2 示例操作
git reset --soft HEAD~1
git reset HEAD~2
git reset --hard abc123
git reset HEAD file.txt
7.1.3 使用场景
7.1.4 注意事项
- 对已推送的提交使用
reset --hard
会导致团队协作问题
- 可通过
git reflog
找回误删的提交
7.2. git revert
- 创建反向提交
7.2.1 作用原理
- 生成一个新的提交,用于撤销指定提交的更改
- 与 reset 的区别:保留原始提交历史,适合公共分支
7.2.2 示例操作
git revert abc123
git revert -m 1 merge-commit-id
git revert old-commit..new-commit
7.2.3 冲突处理
git revert --abort
git revert --continue
7.2.4 使用场景
7.3. git stash
- 暂存临时修改
7.3.1 作用原理
- 将工作区和暂存区的修改保存到栈中(不生成提交)
- 存储内容包含:
- 工作区已跟踪文件的修改
- 暂存区的变更(需加
--include-untracked
包含新文件)
7.3.2 示例操作
git stash
git stash push -m "临时保存登录模块修改"
git stash list
git stash apply
git stash apply stash@{1}
git stash pop
git stash clear
7.3.3 高级用法
git stash -u
git stash push -p
git stash branch new-branch stash@{1}
7.3.4 使用场景
7.4 三命令对比总结
命令 |
是否修改历史 |
适用场景 |
危险等级 |
reset |
是 |
本地提交回退 |
高危(可能丢失数据) |
revert |
否 |
公共提交撤销 |
安全 |
stash |
无 |
临时保存修改 |
安全 |
7.5 典型工作流
7.5.1 场景1:修复紧急Bug
git stash -m "WIP: 用户模块优化"
git checkout -b hotfix
git commit -m "fix: 紧急修复支付漏洞"
git checkout main
git merge hotfix
git stash pop
7.5.2 场景2:撤销错误提交
git log --oneline
git revert abc123
git push
git reset --soft HEAD~1
8、标签管理
命令 |
作用 |
示例 |
git tag |
查看/创建标签 |
git tag v1.0.0 |
git push --tags |
推送标签到远程 |
git push origin --tags |
8.1. git tag
- 查看/创建标签
8.1.1 作用
- 查看标签:列出仓库中所有标签(按字母排序)
- 创建标签:为特定提交打上永久标记(常用于版本发布)
8.1.2 标签类型
类型 |
创建命令 |
特点 |
轻量标签 |
git tag v1.0.1 |
只是指向提交的指针 |
附注标签 |
git tag -a v1.0.0 -m "Release" |
包含完整元信息的独立对象 |
8.1.3 示例操作
git tag
git tag v1.2.0
git tag -a v2.0.0 -m "正式发布用户中心模块"
git tag -a v1.1.1 abc123 -m "修复安全漏洞"
git show v1.0.0
8.1.4 使用场景
- 标记发布版本(如
v1.0.0
)
- 标识重要里程碑(如
production-2023
)
- 快速回滚到稳定版本:
git checkout v1.0.0
8.2. git push --tags
- 推送标签到远程
8.2.1 作用
- 将本地标签同步到远程仓库
- 与分支推送的区别:标签需要显式推送(不会随
git push
自动推送)
8.2.2 示例操作
git push origin v1.0.0
git push origin --tags
git push origin :refs/tags/v0.9.0
8.2.3 标签同步策略
场景 |
操作 |
正式版本发布 |
只推送附注标签 |
临时测试标记 |
保留为本地标签 |
错误标签清理 |
先删本地再删远程 |
8.2.4 使用场景
- 团队共享版本标记
- CI/CD 流水线自动构建特定版本
- 开源项目发布公告
8.3 最佳实践指南
8.3.1. 语义化版本控制(SemVer)
v<主版本>.<次版本>.<修订号>
示例:
v1.0.0 - 正式首发版
v1.1.0 - 新增功能
v1.1.1 - 紧急修复
8.3.2. 签名验证(安全项目必备)
git tag -s v2.0.0 -m "Signed release"
git tag -v v2.0.0
8.3.3. 与分支配合使用
git checkout release-branch
git tag -a v1.5.0 -m "Production release"
git push origin v1.5.0
9、高级操作

命令 |
作用 |
示例 |
git bisect |
二分查找Bug |
git bisect start |
git cherry-pick |
选择性合并提交 |
git cherry-pick abc123 |
git reflog |
查看操作历史 |
git reflog (找回误删分支) |
9.1. git bisect
- 二分查找Bug
9.1.1 作用原理
- 通过二分法快速定位引入Bug的提交
- 自动化流程:标记"好"和"坏"提交,Git自动跳转到中间提交供验证
9.1.2 示例操作
git bisect start
git bisect bad
git bisect good v1.0.0
git bisect run npm test
git bisect reset
9.1.3 使用场景
- 定位难以追溯的回归Bug
- 大型项目中快速缩小问题范围
- 结合测试脚本实现自动化排查
9.1.4 输出示例
Bisecting: 15 revisions left to test
Commit abc123: 测试通过 → 继续向后查找
Commit def456: 测试失败 → 继续向前查找
9.2. git cherry-pick
- 选择性合并提交
9.2.1 作用原理
- 将指定提交的变更重新应用到当前分支
- 生成新的提交(与原提交内容相同但哈希值不同)
9.2.2 示例操作
git cherry-pick abc123
git cherry-pick abc123..def456
git cherry-pick -n abc123
git cherry-pick --abort
git cherry-pick --continue
9.2.3 使用场景
- 从其他分支移植特定修复
- 撤销之前的revert操作
- 同步特定功能到发布分支
9.2.4 注意事项
9.3. git reflog
- 查看操作历史
9.3.1 作用原理
- 记录所有本地仓库引用变更(包括被删除的提交)
- 存储在
.git/logs/
目录下
9.3.2 示例操作
git reflog
git reflog show main
git reflog
git branch recovered-branch abc123
9.3.3 典型输出
abc123 (HEAD -> main) HEAD@{0}: commit: 更新登录页
def456 HEAD@{1}: reset: moving to HEAD~1
ghi789 HEAD@{2}: pull origin main
9.3.4 使用场景
- 恢复误删的分支/提交
- 找回被reset丢失的代码
- 审计本地仓库操作记录
9.3.5 注意事项
- 只记录本地操作(不会同步到远程)
- 默认保留90天记录(可通过
gc.reflogExpire
配置)
9.4 三命令对比总结
命令 |
核心用途 |
数据恢复能力 |
bisect |
Bug定位 |
无 |
cherry-pick |
提交移植 |
无 |
reflog |
操作回溯 |
可恢复误删数据 |
9.5 典型工作流示例
9.5.1 场景1:定位生产环境Bug
git bisect start
git bisect bad
git bisect good v2.0.0
git show abc123
git bisect reset
9.5.2 场景2:紧急修复移植
git checkout production
git cherry-pick abc123
git push origin production
9.5.3 场景3:恢复误操作
git reflog
git reset --hard def456
10、配置与帮助
命令 |
作用 |
示例 |
git config |
修改配置 |
git config --global alias.co checkout |
git help |
查看帮助 |
git help commit |
10.1. git config配置
10.1.1. 基本功能
- 查看或修改 Git 的配置参数
- 配置分为三个级别(优先级从高到低):
- 本地仓库(
.git/config
):只影响当前项目
- 全局用户(
~/.gitconfig
):影响当前用户的所有仓库
- 系统级(
/etc/gitconfig
):影响所有用户
10.1.2. 配置文件结构
[user]
name = Your Name
email = your@email.com
[alias]
co = checkout
[core]
editor = code --wait
10.2 参数详解与示例
10.2.1. 查看配置
git config --list --show-origin
git config user.name
10.2.2. 修改配置
git config --global user.name "Your Name"
git config core.editor "code --wait"
git config --unset alias.co
10.3 使用场景与最佳实践
10.3.1. 配置用户信息(首次使用必做)
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
10.3.2. 创建命令别名(提升效率)
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 config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
10.3.3. 跨平台协作配置
git config --global core.autocrlf true
git config --global core.autocrlf input
10.3.4. 安全增强配置
git config --global push.rejectForce true
git config --global commit.gpgsign true
10.4 典型配置示例
10.4.1. 完整开发环境配置
git config --global user.name "Dev User"
git config --global user.email "dev@company.com"
git config --global core.editor "code --wait"
git config --global core.autocrlf input
git config --global init.defaultBranch main
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.last "log -1 HEAD"
git config --global push.rejectForce true
git config --global transfer.fsckObjects true
10.4.2. 查看当前生效配置
git config --list
11、实用命令组合
1. 清理本地已合并分支
git branch --merged | grep -v "main" | xargs git branch -d
2. 修改多个提交消息
git rebase -i HEAD~3
3. 同步远程已删除分支
git fetch --prune
12、命令速查表
场景 |
常用命令 |
日常提交 |
add , commit , status , restore |
分支管理 |
branch , checkout , merge , rebase |
团队协作 |
fetch , pull , push , remote |
错误恢复 |
reset , revert , stash , reflog |
13、扩展设计要点
1. 引用命名空间
- 分支:
refs/heads/
- 标签:
refs/tags/
- 远程跟踪:
refs/remotes/origin/
2. 钩子机制(Hooks)
- 关键钩子:
pre-commit
:提交前检查代码
post-receive
:服务端推送后触发 CI
3. 垃圾回收
-
触发条件:
- 松散对象过多(默认≥7000)
- 手动执行
git gc
-
过程:
- 合并松散对象为 packfile
- 移除不可达对象
所有评论(0)