簡體   English   中英

如何查找自提交后哪些文件未更改?

[英]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~6REV=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM