在Git工作区中检测修改文件的简单方法是什么?

Jam*_*mie 33 git build-process makefile

在make期间,我创建了我嵌入链接输出中的字符串字段.很有用.

除了命令的复杂sed/ grep解析之外git status,如何轻松确定工作空间中的文件是否已根据git?进行修改?

Chr*_*sen 52

如果你只想要一个简单的"与HEAD有什么不同吗?":

git diff-index --quiet HEAD
Run Code Online (Sandbox Code Playgroud)

如果退出代码为0,则没有差异.

如果你想"从HEAD改变了哪些文件?":

git diff-index --name-only HEAD
Run Code Online (Sandbox Code Playgroud)

如果你想"从HEAD改变哪些文件,以及改变(添加,删除,更改)的方式有哪些?":

git diff-index --name-status HEAD
Run Code Online (Sandbox Code Playgroud)

如果要重命名(和复制)检测,请添加-M(和-C).

这些命令将检查暂存的内容(索引中的内容)和工作树中的文件.类似的替代方法git ls-files -m只会针对索引检查工作树(即它们将忽略工作树中也存在的任何暂存(但未提交)内容).


Chr*_*röm 37

git ls-files -m

要找到这个你可以浏览git help -a.

  • @Jamie:带有暂存(但未提交)更改的文件不会显示为`git ls-files -m`,这可能是您想要的,也可能不是. (9认同)

MDC*_*ore 22

git status --porcelain 似乎给出了一个很好的可解析输出.


Yin*_*ich 5

git diff --name-only做同样的事情(可能更直观......)


Mar*_*ues 5

对于 git hooks,我发现这个命令很有用

git diff-index --exit-code --ignore-submodules HEAD
Run Code Online (Sandbox Code Playgroud)

例如

//run some static analysis check that can change the code
something_changed=`git diff-index --exit-code --ignore-submodules HEAD`
if [ -n "$something_changed" ]
then
    echo >&2 "Something changed in $local_ref, not pushing"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)