了解集成分支是否包含本地分支的提示



我想获取可以安全删除的分支列表。我的问题是,有没有办法在不检查该分支的情况下确定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 中的新增功能。

最新更新