我想知道如何在bash脚本中的两个分支之间获得一些更改的文件,例如。
git diff v1.1.123..master --stat
这给出了一个文件列表和详细的更改/添加/删除,但是我需要bash变量中已更改文件的数量。
或者,无论如何要查明bash变量中的分支之间是否有任何变化,以便在有任何变化时我可以进行一些操作。
答案 0 :(得分:3)
(答案是从评论中复制和扩展的,尽管现在这里的答案主要是几个“仅姓名或姓名状态”的问题。)
你已经离开那里了。只需将--stat
替换为--name-status
,然后根据状态编写代码进行计数。 (另请注意,git diff X..Y
与git diff X Y
完全相同:..
的通常特殊含义(两个点)在git diff
中消失。)
--name-only
如果您不关心聚合添加,删除,修改以及可能的复制,重命名,类型更改(例如,从常规文件到符号链接)等的统计信息,也可以正常工作。您的差异将检测重命名取决于(a)文件相似性和(b)选项和/或diff.renameLimit
的设置。复制检测同样受选项控制。请注意,您也可以使用--diff-filter
选择(或者,因为git 1.8.5,排除 1 )特定的更改。
要仅计算文件,通过wc -l
管道差异输出就足够了(但请注意其输出有前导空格)。
1 例如,git diff A B --name-status --diff-filter=AD
只会生成添加或删除的文件列表。要排除类型更改项,git diff A B --name-status --diff-filter=t
可以在git 1.8.5或更新版本中执行此操作;对于旧版本,您必须列出但 T
所有内容,例如--diff-filter=ABCDMRUX
,具体取决于您是否要求配对中断。我还要注意,Unmerged和X(未知)不应该出现在这里;只有在对索引调用diff时才会出现U
状态。
答案 1 :(得分:0)
执行此命令并对文件执行计数
git diff --name-only SHA-1 SHA-2
如果您只想计算文件:
<强>
git-whatchanged
强> - 显示每个提交引入差异的日志
# replace the -1 with the desired number of commits you need
# the output will be a number for the modified files,
git whatchanged -1 --format=oneline | wc -l
要获取完整的文件列表(名称等,只需删除wc
)
git whatchanged -1 --format=oneline
答案 2 :(得分:0)
如果A和B是不同的分支,请键入
git diff A..B --name-status