您可以使用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'? –