在git历史中查找未部署的提交

时间:2014-01-22 13:54:02

标签: git

当我们计划下一个版本时,我们通过查看上一版本中未包含的提交来构建发行说明。通常我们使用gitk和训练有素的眼睛来检测这样的提交。但是现在,由于提交和分支的数量在增加,因此看到它们变得越来越难。

是否有一个命令可以打印HEAD下的所有提交但不打印特定的标签?为了更清楚,我在简化的例子中添加了这个。

                    F <- develop | HEAD
                    | \ 
                    D E
                    | |
last_release_tag -> B C
                    |/
                    A 

预期输出为:C E D F(订单并不重要。)

提前致谢。

3 个答案:

答案 0 :(得分:2)

您正在寻找的是一系列提交,包括HEAD之前的所有提交,但不包括最后一个版本标记。您可以使用:

git log last_release_tag..HEAD

相当于:

git log ^last_release_tag HEAD

有关详细信息,请参阅gitrevisions(7)中的“指定范围”。在第二种形式中,如果您需要排除多个标记,则可以使用多个^last_release_tag(例如,如果版本C也已发布,则可能需要这样做。)

您可能还需要调查--oneline--pretty格式等选项来自定义输出,具体取决于您希望发布说明的外观。更多细节可以在git-log(1)中的“PRETTY FORMATS”下找到。

答案 1 :(得分:1)

gitk只是标准Git工具之上的图形层。在您的示例中,

git log last_release_tag..F

会列出有关您想要的提交的信息。该命令应解释为“F可以访问的提交,除了last_release_tag指向的提交可以访问的提交”。如果默认输出格式不符合您的需要,有许多格式选项,请参阅git-log(1)。有关如何指定修订范围的详细信息,请参阅gitrevisions(7)

对于只需要提交的SHA-1的脚本编写目的,请使用git rev-list管道命令。

答案 2 :(得分:0)

bash脚本应该完成这项工作:

for commit in `git log --pretty=format:"%H" START_COMMIT..HEAD; do
  # Is there a tag which points to this commit ?
  tag=`git tag -l --points-at $commit`; 
  # Test if not the specific tag
  if test "$tag" != "specific_tag"; then 
    # You can use any git command on the commit here
    echo $commit;
  fi ; 
done