git: 当用git log -p 看不到文件的完整修改记录时,怎么办?
一,问题发生的情形:
某文件中的某三行记录被删除后提交了,
这时用 git log -p 找不到原始的三行代码的添加记录,
不知道这个原始三行记录的commit,也不知道所属的分支,
只能看到删除三行代码的记录,
因为是在测试站,此时不能做reset然后用git blame查commit,
怎么找到指定文件的完整的修改记录呢?
二,原因
当你发现
git log -p 某个文件 丢失了部分修改记录时,通常是因为 Git 在默认情况下会隐藏某些特殊历史,比如:- 文件在过去被重命名或移动过路径。
- 文件的修改来自于分支合并(Merge Commit),Git 默认略过了合并节点的差异。
三,解决:
git log -p --follow --full-history -m -- 某个文件
--follow(解决重命名问题):
这是最常见的原因。如果src/index.js在两周前叫src/main.js,普通的git log查到重命名那天就会戛然而止。
加上--follow可以让 Git 顺着重命名历史继续往前追溯。--full-history(解决分支分支合并时的历史简化):
Git 默认会进行“历史简化”(History Simplification)。如果一个分支合并进来时没有发生冲突,或者某些修改在合并时被覆盖了,
Git 可能会在日志中把这段分支的修改隐藏掉。这个参数强迫 Git 展示所有分支线上对该文件的修改。-m(显示合并节点的代码差异):
默认情况下,git log -p不会显示合并提交(Merge Commit)的代码对比。
加上-m可以强行拆开合并节点,显示合并时该文件到底发生了什么改变。--(分隔符):
这是一个安全语法,告诉 Git 后面紧跟的是文件路径,而不是分支名,防止文件名和分支名同名时产生歧义。
浙公网安备 33010602011771号