查看集成分支是否包含本地分支的提示

Find out if integration branch contains tip of local branches

我想获取可以安全删除的分支列表。我的问题是,有没有办法确定 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 的祖先吗?

其中 "ancestor of" 允许相等。这是 git merge-base --is-ancestor C1 C2 执行的测试。请注意,这些项目中的任何一项都可能是哈希 ID 或引用名称,结果是退出状态的一部分(足够适当)。 --is-ancestor 测试是 Git 1.8.0 中的新测试。