找到合并分支的时间

时间:2014-01-09 20:12:33

标签: git merge branch

互联网上有很多脚本可以删除已合并的分支such as

$ git branch --merged master | grep -v master | xargs -n 1 git branch -d

但是我想在进行清理之前保持我的分支一段时间。所以:

如何找到合并特定分支的时间?我希望能够获取哈希和合并提交的日期。能够管理多个分支机构的额外功劳。我最终会选择

$ git branch --merged master | [find dates for each]
    | [compare dates to arbitrary date] | [delete old merged branches]

我意识到标准做法是标记/删除你想要保留更长时间的分支,但如果我这样做,我仍然会问这个关于合并提交的哈希和时间的问题。 / p>

编辑:

我一直在浏览these threads,因为我正在寻找分支参考的子提交。不幸的是,正如this comment中提到的,--children只有将子项添加到logrev-list返回的提交中,而不是只返回子项

1 个答案:

答案 0 :(得分:2)

更新2015-05-15

更好的答案,直接引用分支的父提交是这样的:

$ git rev-list -1 --format=%p <branch_name> | grep -v commit |
  xargs -I {} sh -c 'git rev-list -1 --format="%h %ct" {}' | grep -v commit

您仍然可以将合并到master的所有分支都输入其中:

$ git branch -a --merged master | grep -v master | 
  xargs -I {} sh -c 'git rev-list -1 --format=%p {}' | grep -v commit |
  xargs -I {} sh -c 'git rev-list -1 --format="%h %ct" {}' | grep -v commit

即使对于已经成为快速前进树的一部分的分支,这也可能有用。

如果有一个论点你可以传递给rev-list,这会阻止你每次grep -v commit,我有兴趣知道它。

注意:我会搜索与grep -v master匹配的分支名称,而不是issue。如果您想要包含或排除特定分支,您应该这样做。


原始

要获取哈希值,您似乎可以执行以下操作:

$ git log --ancestry-path --merges --format=%H <branch_name>..master | tail -1

或者您可以使用您要查找的任何格式替换格式。 --merges只会减少在我们选择最后一行之前返回的行数。

您可以使用以下方法管道合并分支列表:

$ git branch -a --merged master | grep -v master |
  xargs -I {} sh -c 'git log --ancestry-path --format=%H --merges {}..master | tail -1'

但我还没有做过实际的修剪。 =)