在git中如何找出在特定标签之后添加了哪些文件?
Posted
技术标签:
【中文标题】在git中如何找出在特定标签之后添加了哪些文件?【英文标题】:In git how to find out which files were added after a specific tag? 【发布时间】:2015-07-01 08:30:16 【问题描述】:我维护数据库迁移 sql 脚本文件。
我用 git tag 标记我的提交。
假设我有像 1、1.1、1.2、1.3 这样的标签
我只想修改一个(DB 迁移 sql 脚本)文件,当该文件创建后没有向 repo 添加标签时。我怎样才能找到这个?
如果创建了文件,然后添加了(版本)标签,那么我不想修改那个 sql 迁移脚本,而是添加一个全新的 sql 文件,它可以帮助我做我想做的事情。
【问题讨论】:
所以,基本上,您想查看自最后一个标签以来添加的文件列表,对吗? @user494461 我注意到您添加了赏金。您能否澄清您的问题以说明您在寻找什么以及为什么现有答案没有涵盖它? 【参考方案1】:您可以将 git diff 与一些 grepping 一起使用,如下所示:
git diff --name-status your-tag..HEAD | grep ^A
这意味着:
“告诉我your-tag
和HEAD
之间的区别,显示文件名及其状态(添加、修改、删除、创建)。”
然后 grep 将其过滤到已添加的文件中,--name-status
通过以大写“A”开头的行来表示。
【讨论】:
【参考方案2】:要自动查找最新标签,可以使用以下命令:
git describe $(git rev-list --tags --max-count=1)
然后,diff 命令将为您提供两次提交之间添加的文件的列表:
git diff --diff-filter=A --name-only $start_commit_id $end_commit_id
更多选项可以添加到差异过滤器,例如--diff-filter=AR
将列出已添加 [A] 和 [R] 命名的文件。
现在,如果将两个命令放在一起,您将获得自最后一个标签以来的文件列表,无论最后一个标签标签是什么:
git diff --diff-filter=A --name-only $(git describe
$(git rev-list --tags --max-count=1)) HEAD
【讨论】:
以上是关于在git中如何找出在特定标签之后添加了哪些文件?的主要内容,如果未能解决你的问题,请参考以下文章
JGit:我可以在不检查的情况下找出某个特定标签是不是存在于 Git 存储库中吗?
如何在 C++ 程序中的 2 个特定字符之间比较 2 个文件中的文本行