有没有办法在GIT中相互获取本地/远程存储库w.r.t中所有新/已删除/修改的目录/文件的列表?
答案 0 :(得分:29)
列出这些文件的最佳方法是使用git status --porcelain
例如: 删除以前删除的文件:
git status --porcelain | awk 'match($1, "D"){print $2}' | xargs git rm
答案 1 :(得分:13)
我不确定你对彼此的意思,但是如果你想要一个单独的列表(例如所有修改过的文件),你可以使用带有正确标志的git ls-files
(对于修改过的文件,它是{{ 1}})。如果您想同时获得所有这些信息,可以使用-m
获取状态的脚本可解析输出。
答案 2 :(得分:9)
你可能想要的是:
git fetch # update what you know about the remote repo
git diff --name-status master origin/master
但很难确切地说出你想要从你的问题中区分出哪些分支。
答案 3 :(得分:9)
执行此操作的一种方法是使用whatchanged
命令:
$ git whatchanged
这显示了树中每个提交更改的文件,也可用于查看详细信息。看看git help whatchanged
答案 4 :(得分:6)
使用git add
的干运行(-n)选项:
git add -A -n
答案 5 :(得分:1)
使用命令--name-status
带标签的示例:
git diff v1.0.1 v1.0.2 --name-status
提交示例:
git diff b79810fc4d be69e41d1c --name-status
它会列出所有已更新的文件及其状态:
M
- 已修改
D
- 已删除
A
- 已添加</ p>
答案 6 :(得分:1)
要获取当前更改文件的文件名和状态,您可以简单地:
git diff --name-status
您将获得如下的裸输出:
M a.txt
M b.txt
现在,将输出传递给cut
以提取第二列:
git diff --name-status | cut -f2
然后您将只拥有文件名:
a.txt
b.txt
答案 7 :(得分:0)
执行git diff
,您将看到所有文件都发生了变化以及这些文件中发生了哪些变化的详细信息
答案 8 :(得分:0)
就我而言,我需要所有新/修改/未跟踪文件的列表。下面的命令成功了:
git status --porcelain | cut -c 1-3 --complement
cut -c 1-3 --complement
部分用于删除三个初始状态字符,以便我可以使用 xargs
对文件运行任意脚本。例如,对所有新的/更改的 JavaScript 文件(在 nodejs 存储库中)运行 eslint:
git status --porcelain | cut -c 1-3 --complement | egrep .js$ | xargs npm run lint -- --fix