首页 > 解决方案 > 两个标签之间更改的文件的 git 列表以及中间标签更改

问题描述

我正在尝试获取在两个 git 标签之间更改的文件列表。这些标签还有一些其他标签。

git diff tags/v1.0.0 tags/v1.5.0 --name-only

上面的命令显示了这些标签之间的差异(仅 v1.5.0 中的更改)并且不包括中间标签更改。我也试过

git rev-list tags/v1.5.0 ^tags/v1.0.0 --count

这会给我这两个标签之间的提交计数。接着

git diff tags/v1.5.0~count tags/v1.5.0 --name-only

但这给了我不正确的数据。

任何帮助表示赞赏。提前致谢

标签: git

解决方案


git rev-list tags/v1.5.0 ^tags/v1.0.0 --count

这会给我这两个标签之间的提交计数。

不,它将为您提供无法 .tags/v1.5.0 tags/v1.0.0

为了说明差异,假设我们有一个这样的图形片段:

          *--*--*      *   <-- tags/v1.5.0
         /       \    /
...--o--o---------*--*--o--o--o   <-- master
         \
          o--o   <-- tags/v1.0.0

在这里,发布v1.0.0与顶部的功能气泡几乎同时创建,但随后需要进行一些修复。后来,该功能被合并到 master 中,从那时起v1.5.0创建了 release 并且需要一次提交来修复它。(同时master继续积累工作。)

标有星号的提交*可以从标签到达,从tags/v1.5.0标签指向的提交开始并向后工作,遵循所有路径(包括功能气泡)。

在这种情况下,有六个这样的提交。

git diff tags/v1.5.0~count tags/v1.5.0 --name-only

~运算符是一个图形跟随运算符。它向后移动了一些第一个父步骤。提交的第一个父级1.5.0是 on master,第二个父级是合并提交 on master,第三个父级是 main-line-row *。第四个父级是o具有通向 的分叉的那个tags/v1.0.0,第五个是可从所有名称访问的提交,沿该第一个父级轴返回的第六个提交位于此处显示的图表部分之前。

因为您的实际问题没有明确定义,所以很难说正确的方法可能是什么。您可能会在两个标签之间查找合并基础,然后用于--ancestry-path选择作为此合并基础的后代但第二个标签的祖先的提交,并检查是否可以从其他标签访问这些提交中的任何一个以及是否那么什么合并基地沿着祖先路径线落下。请注意,从tags/v1.0.0to的直接祖先路径tags/v1.5.0是空的,因为tags/v1.0.0它不是任何已加星标的提交的祖先。


推荐阅读