小智 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获取状态的脚本可解析输出.
你可能想要的是:
git fetch # update what you know about the remote repo
git diff --name-status master origin/master
Run Code Online (Sandbox Code Playgroud)
但很难确切地说出你想从你的问题中区分出哪些分支.
一种方法是使用以下whatchanged命令:
$ git whatchanged
Run Code Online (Sandbox Code Playgroud)
这显示了树中每个提交更改的文件,也可用于查看详细信息.看一眼git help whatchanged
就我而言,我需要所有新的/修改的/未跟踪的文件的列表。下面的命令就达到了目的:
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)
要获取文件名和当前更改文件的状态,您可以简单地:
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)