Git修改与提交完整总结(含高级用法)
一、查看修改(提交前/后)
| 场景 | 命令 | 说明 |
|---|---|---|
| 查看工作区修改(未暂存) | git diff |
查看已修改但未 git add 的内容 |
| 查看暂存区修改(已暂存未提交) | git diff --staged 或 git diff --cached |
查看已 git add 但未 git commit 的内容 |
| 查看最近一次提交的修改 | git show |
显示最新提交的详细内容 |
| 查看特定提交的修改 | git show <commit-hash> |
如 git show 13b99c0 |
| 查看提交历史+修改统计 | git log --stat |
每次提交改了哪些文件 |
| 查看提交历史+详细内容 | git log -p |
每次提交的具体代码改动 |
| 只看修改了哪些文件 | git diff --name-only |
不显示具体内容 |
二、提交修改(基础)
| 方式 | 命令 | 说明 |
|---|---|---|
| 分两步(推荐) | git add <文件>~<br />~git commit -m "说明" |
先暂存后提交,可先确认内容 |
| 一步完成(已跟踪文件) | git commit -a -m "说明" |
自动暂存所有已跟踪文件的修改 |
| 编辑器编写说明 | git commit 或 git commit -v |
打开编辑器写详细说明 |
三、从 diff 输出提取提交说明(高级)
1. 提取单行作为提交说明
|
|
grep '+;;': 筛选包含+;;的行(新增的以;;开头的行)head -1: 只取第一行sed 's/^+//': 去掉行首的+号
2. 提取多行组合成提交说明
方式一:用分号连接多行
|
|
tr '\n' '; ': 将换行符替换为分号+空格,多行合并为一行
方式二:用空格连接
|
|
paste -sd ' ' -: 用空格连接多行(~-s~ 串行化,~-d ' '~ 指定分隔符)
方式三:保留换行(需用 -F 从文件读取)
|
|
-F: 从文件读取提交说明,可保留多行格式
3. 带固定前缀组合
|
|
结果示例:~更新配置: 或 bean-price main.beancount 2> /dev/null >> prices.beancount~
4. 创建 Git 别名(一劳永逸)
|
|
5. 与编辑器结合(预填充,可修改)
|
|
-e: 打开编辑器,允许修改预填充的提交说明
四、实用场景示例
场景一:提取新增的配置行作为提交说明
|
|
场景二:提取函数名作为提交说明
|
|
五、关键提醒
| 要点 | 说明 |
|---|---|
| ⚠️ 提交后暂存区清空 | git diff --staged 为空是正常的,用 git show 查看历史 |
| ⚠️ 空提交说明会失败 | 如果 grep 找不到匹配行,命令会报错 |
| ⚠️ 自动提取不够智能 | 适合固定格式的提交(如配置行、注释),复杂提交建议手动写 |
| ✅ 好习惯 | 提交说明写"为什么改"而非"改了什么" |
六、完整工作流速查
基础工作流
|
|
高级工作流(自动提取提交说明)
|
|
提交后验证
|
|