繁体   English   中英

我需要检查分支中的每个提交,需要在Git中列出已更改,添加和删除的文件

[英]i need to check for every commit made in the branch, need list the changed, added & deleted files in Git

我需要在一行中列出分支中所有已更改,已删除和添加的文件。 稍后将添加和修改添加到一个名为added_or_modified.txt的文件中,并将其添加到deleted.txt中。 有没有办法在一行中找到更改,添加和删除的文件?

(因为你没有提到你想要区分哪些状态,我假设最简单的上下文,与HEAD区分。如果你试图看到其他给定状态之间的差异,请随意将它添加到你的问题中,我会适应我的答案)

我会做一些事情

git diff --name-status

在文件名之前,您将使用符号表示文件状态的字母:

A added
C changed
D deleted
M modified
R renamed
T changed
U unmerged
X unknown
B broken pairing

这里关于这些状态的详细信息。


对于文件中已删除的文件列表(其他状态的原则相同),您可以这样做

git diff --diff-filter=D > deleted.txt

你的问题标题说你需要检查每个提交。 在那种情况下,也许你的意思是像git log 另一方面,您对输出的描述听起来就像您只需要一个文件列表(或稍后两个)。 这表明git diff代替了。

git log --name-only --format="" <upstream_branch_name>..<branch_name>

要么

git diff --name-only <upstream_branch_name>..<branch_name>

例如,如果你正在检查一个名为my_feature的分支,并想知道每个提交中的更改,因为它与develop分支分开,你可以说

git log --name-only --format="" develop..my_feature

在这里,我使用了--format=""这样你可以得到一个文件名列表; 如果您为每次提交生成一个列表,您可能希望使用format选项执行不同的操作。 我提到它是因为,正如所写的那样,文件可能会出现多次 - 甚至出现一次,因为提交A创建了它,并且再次因为提交B删除了它。 如果这不可取,并且您只想要与分支关联的净更改,请使用diff而不是log

在线下你可以改变它

git log --name-status --format="" develop..my_feature

要么

git diff --name-status develop..my_feature

并处理结果以将删除分离到它们自己的文件。 请注意,使用--name-status ,git将默认应用重命名检测。 所以你可能会得到一些像

D    file1
A    file2
M    file3

这是你想要看到的。 D开头的那个被删除了,所以把它放在删除列表中; 其他人被添加和修改。 但你也可能会得到一些像

R99  fileX   fileY

意味着git认为你已经将fileXfileXfileY并在同一次提交中进行了少量修改。 如果你宁愿git给你

D    fileX
A    fileY

这样你就可以看到单独出现和消失的路径,然后添加--no-renames选项

git diff --name-status --no-renames develop..my_feature

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM