互联网上有很多脚本可以删除已合并的分支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
只有将子项添加到log
或rev-list
返回的提交中,而不是只返回子项
答案 0 :(得分:2)
更好的答案,直接引用分支的父提交是这样的:
$ 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'
但我还没有做过实际的修剪。 =)