git
2026-04-11 08:39:53.988 [info] > git log --format=%H%n%aN%n%aE%n%at%n%ct%n%P%n%D%n%B -z --shortstat --diff-merges=first-parent -n50 --skip=0 --topo-order --decorate=full --stdin [327ms]
2026-04-11 08:39:54.157 [info] > git merge-base lyl_dev origin/lyl_dev [147ms]
2026-04-11 08:41:42.905 [info] > git ls-files --stage -- pnpm-lock.yaml [194ms]
2026-04-11 08:41:43.073 [info] > git cat-file -s 568c29fce4b42ad8d03d94836489efbc54abe2f3 [167ms]
2026-04-11 08:43:48.833 [info] > git ls-files --stage -- pnpm-lock.yaml [240ms]
2026-04-11 08:43:48.986 [info] > git cat-file -s 568c29fce4b42ad8d03d94836489efbc54abe2f3 [151ms]
2026-04-11 08:44:05.711 [info] > git log --format=%H%n%aN%n%aE%n%at%n%ct%n%P%n%D%n%B -z --shortstat --diff-merges=first-parent -n50 --skip=0 --topo-order --decorate=full --stdin [294ms]
2026-04-11 08:44:05.882 [info] > git merge-base lyl_dev origin/lyl_dev [150ms]
2026-04-11 08:44:06.706 [info] > git ls-files --stage -- package.json [174ms]
2026-04-11 08:44:06.707 [info] > git show --textconv :package.json [178ms]
2026-04-11 08:44:06.708 [info] > git ls-tree -l HEAD -- package.json [178ms]
2026-04-11 08:44:06.708 [info] > git show --textconv HEAD:package.json [181ms]
2026-04-11 08:44:06.858 [info] > git cat-file -s 53453d90a04038d6194f203fe1bf9032fa475eec [151ms]
2026-04-11 08:44:07.192 [info] > git check-ignore -v -z --stdin [153ms]
check-ignore
查询文件是否被 Git 忽略,并输出忽略原因
git check-ignore -v -z --stdin| 参数 | 全称 | 含义 |
|---|---|---|
-v | --verbose | 详细模式:输出哪一个 .gitignore 文件 + 行号 + 规则 + 被忽略文件,是排查忽略问题的关键 |
-z | --null | 输出用 ** 空字符(NUL)** 分隔结果,而非换行符;解决文件名带空格、换行、特殊字符时的解析错误 |
--stdin | 从 ** 标准输入(键盘 / 管道)** 读取要检查的文件路径,而非命令行参数 |
cat-file
查看 Git 仓库中,某个哈希值对应的底层对象信息
git cat-file -s 53453d90a04038d6194f203fe1bf9032fa475eec| 参数 | 全称 | 含义 |
|---|---|---|
-s | --size | 只输出对象大小(字节数) |
<hash> | - | Git 对象的 SHA-1 哈希值(必须写全或前几位唯一) |
show
git show --textconv HEAD:package.json| 部分 | 含义 |
|---|---|
git show | 核心命令:显示 Git 对象的内容(提交、文件、标签、树都能看) |
--textconv | 参数:自动转换二进制文件为人类可读文本(图片 / 文档 / 压缩包等),纯文本文件不受影响 |
HEAD | 指向最新一次提交(也可以换成 commit 哈希、分支名、标签名) |
: | 固定分隔符:版本号:文件路径 |
package.json | 要查看的文件路径 |
- 格式 / 内容控制
--name-only只显示文件名,不显示文件内容--name-status显示文件名 + 变更状态(新增 / 修改 / 删除)--stat显示文件变更统计(增删行数)--oneline精简输出(只留一行摘要)
- 差异 / 格式化
--pretty=format:"..."自定义输出格式(适合脚本解析)--no-patch不显示差异内容,只显示提交信息--text强制把所有文件当作文本处理
- 历史 / 版本相关
<commit>:<file>查看指定版本的指定文件(你现在用的格式)<commit>直接查看某次提交的完整变更详情(作者、信息、文件差异)
git ls-files --stage -- package.json| 部分 | 含义 |
|---|---|
git ls-files | 核心命令:列出 Git 追踪的文件 / 暂存区文件信息 |
--stage | 关键参数:显示暂存区(stage/index)详细信息(哈希、模式、序号) |
-- | 分隔符:明确告诉 Git 后面的是文件名,不是参数(文件名带 - 时必须用) |
package.json | 要查询的具体文件 |
git log --format=%H%n%aN%n%aE%n%at%n%ct%n%P%n%D%n%B -z --shortstat --diff-merges=first-parent -n50 --skip=0 --topo-order --decorate=full --stdinmerge-base
git merge-base lyl_dev origin/lyl_dev| 部分 | 含义 |
|---|---|
git merge-base | 核心命令:查找两个(或多个)提交 / 分支的最近共同祖先 |
lyl_dev | 第一个分支:本地的 lyl_dev |
origin/lyl_dev | 第二个分支:远程的 lyl_dev(origin 是远程仓库名) |
判断本地和远程分支状态 如果 merge-base = 本地最新提交 → 本地超前远程 如果 merge-base = 远程最新提交 → 本地落后远程 如果 merge-base 比两者都旧 → 本地和远程已分叉(需要拉取 + 合并)
冲突排查 找两个分支从哪里开始分开,就能定位冲突从哪次提交开始。
git rebase 基础 变基的本质就是:以共同祖先为基准,重新应用提交。