GIT新/已修改/已删除文件列表

Jea*_*ean 32 git diff file list

有没有办法在GIT中获取本地/远程存储库中所有新/已删除/已修改的目录/文件的列表?

小智 30

列出这些文件的最佳方法是使用git status --porcelain

例如:要删除以前删除的文件:

git status --porcelain | awk 'match($1, "D"){print $2}' | xargs git rm
Run Code Online (Sandbox Code Playgroud)


Lil*_*ard 16

我不确定你对彼此的意思,但如果你想要一个单独的列表(例如所有修改过的文件),你可以使用git ls-files正确的标志(对于修改过的文件-m).如果您想同时获得所有这些信息,可以使用git status --porcelain获取状态的脚本可解析输出.

  • 谢谢,这正是我要找的。现在我可以做例如`geany $(git ls-files -m)` (3认同)

Cas*_*bel 9

你可能想要的是:

git fetch     # update what you know about the remote repo
git diff --name-status master origin/master
Run Code Online (Sandbox Code Playgroud)

但很难确切地说出你想从你的问题中区分出哪些分支.


spa*_*row 9

一种方法是使用以下whatchanged命令:

$ git whatchanged
Run Code Online (Sandbox Code Playgroud)

这显示了树中每个提交更改的文件,也可用于查看详细信息.看一眼git help whatchanged

  • 我看到的不仅仅是简单的文件名列表 (2认同)

Alf*_*feu 7

就我而言,我需要所有新的/修改的/未跟踪的文件的列表。下面的命令就达到了目的:

git status --porcelain | cut -c 1-3 --complement
Run Code Online (Sandbox Code Playgroud)

cut -c 1-3 --complement部分用于删除三个初始状态字符,以便我可以针对xargs文件运行任意脚本。例如,针对所有新的/更改的 JavaScript 文件(在 Nodejs 存储库中)运行 eslint:

git status --porcelain | cut -c 1-3 --complement | egrep .js$ | xargs npm run lint -- --fix
Run Code Online (Sandbox Code Playgroud)


Tri*_*Gao 6

使用以下的干运行(-n)选项git add:

git add -A -n


Lea*_*oN. 5

要获取文件名和当前更改文件的状态,您可以简单地:

git diff --name-status

您将获得如下所示的裸露输出:

M       a.txt
M       b.txt
Run Code Online (Sandbox Code Playgroud)

现在,将输出传递cut到以提取第二列:

git diff --name-status | cut -f2

然后,您将只有文件名:

a.txt
b.txt
Run Code Online (Sandbox Code Playgroud)

  • git diff --name-only不会和cut -f2一样吗? (4认同)