我想获取可以安全删除的分支列表。我的问题是,有没有办法在不检查该分支的情况下确定remotes/origin/dev
是否包含提交?
git fetch origin;
git branch | while read branch; do
if [ "remotes/origin/dev" --contains "$b" ]; then
echo "$b";
fi
done
如何检查remotes/origin/dev
是否包含给定分支的最新提交?我可以避免先退房remotes/origin/dev
吗?
使用:
if git merge-base --is-ancestor $b refs/remotes/origin/dev; then
echo $b
fi
但是不要为此使用git branch
! 请改用git for-each-ref
:
git fetch origin
git for-each-ref --format='%(refname)' refs/heads | while read b; do
git merge-base --is-ancestor $b refs/remotes/origin/dev && echo ${b#refs/heads/}
done
例如。 (为了以防万一,这对所有内容都使用全名,但仍会发出缩短的名称。
问题:
- 分支 B 是否包含提交 C?
(对于某些分支名称/标识符B,包括远程跟踪名称,以及提交哈希或其他标识符C(实际上是另一个更一般问题的子集,由git merge-base
命令回答。
更普遍的问题是:
提交- C1 是提交 C2 的祖先吗?
其中"祖先"允许平等。 这是git merge-base --is-ancestor C1 C2
执行的测试。 请注意,这些项中的任何一项都可能是哈希 ID 或引用名称,结果是退出状态的一部分(适当(。--is-ancestor
测试是 Git 1.8.0 中的新增功能。