您可以使用git log
格式来获取之前提交文件的哈希值。例如,
git log --pretty=format:'%h' -1 --skip=1 <filename>
会让你第二次到最后一次提交触摸特定文件。事实上,如果你没有指定文件名,这会让你在整个存储库中第二次到最后一次提交。变老的哈希值,你可以设置一个git的别名调用一个shell功能,如:
[alias]
prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"
要使用它,你会键入类似git prior-hash n <filename>
,其中n为(N + 1)个该文件的最新版本。所以1将是第二次到最后一次提交文件,2将是第三次到最后一次,等等,0将是最近触摸该文件的提交。再次,如果您想要检查整个回购,则文件名是可选的。
我相信你能弄清楚如何从那里建立一个diff命令:
[alias]
prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"
diff-prev-easy = "!dp() { git diff $(git prior-hash $1 $2).. $2; }; dp"
这将采用类似于现有哈希别名,git diff-prev-easy n <filename>
。这将比较第(n + 1)个最后一个修订版和该文件的最新修订版。如果你想,而不是第一次修订比较(N + 1)至第n个最后的修改,这是一个简单的变化:
[alias]
prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"
diff-prev = "!dp() { git diff $(git prior-hash $1 $2)..$(git prior-hash $(($1 - 1)) $2) $2; }; dp"
其中,再次使用相同的方法:git diff-prev n <filename>
一个潜在的但要注意的问题是,git log
按时间顺序列出提交,这可能不是您想要的。考虑这段历史:
1 - 2 - - - 4 - 5 master
\ /
3 - - develop
我们git diff-prev 1
命令会产生差异提交4和5之间,符合市场预期。但git diff-prev 2
会显示提交3和4之间的差异,这可能是不可取的。
你确定你不只是想'git blame'? –