[英]How to find which files have not changed since commit?
在 git 中,如何找出目錄中的哪些文件自某次提交后未更改?
IMO更容易生成列表的方法是以下命令鏈:
git ls-files --full-name | grep -v "$(git diff --name-only <REF>)"
其中<REF>
是您希望從中保存未更改文件的提交的哈希值。
git ls-files
列表,正如您所料,所有版本化的文件,然后grep所有自指定的提交以來不在更改的文件列表中的文件。
使用git diff --name-only $REV
獲取已更改的文件列表。 使用git -C $(git rev-parse --show-toplevel) ls-tree -r HEAD --name-only
來獲取所有文件的列表。 使用grep
分隔集合:
git diff ${REV?must specify a REV} --name-only > /tmp/list
git -C $(git rev-parse --show-toplevel) ls-tree -r HEAD --name-only |
grep -f /tmp/list -v
在執行這些命令之前,您需要在變量REV中指定rev。 例如, REV=HEAD~6
或REV=branch-name~~
請注意,建議的解決方案將提交后的文件刪除視為提交后的更改。
同樣在大型 git 回購中,建議的單行代碼對我不起作用並拋出錯誤: grep: Argument list too long
。
所以,我不得不處理文件:
$ git ls-files --full-name | sort > all.git
$ git diff --name-only <REF> | sort > recent.change
$ comm -12 all.git recent > recent.change.not.deleted
$ comm -13 all.git recent.change.not.deleted
comm
是一個 linux 實用程序,它顯示兩個文件中的公共行和唯一行。 希望其他平台也存在類似的實用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.