0

假设以下提交结构:

master:      A-B-C-D-E----------------
                  \                   \
branch a:          F-G-H     branch d: N-O
                      \
branch b:              I-J
                          \
branch c:                  K-L-M

我想删除从分支 a 下降的所有分支(在本例中为 b 和 c)。有没有办法检测分支 b 和 c 从分支 a 下降?

现在我正在考虑通过发现共同祖先(G)存在于哪些分支来实现这一点;这将返回 a、b 和 c;然后比较配置分支的时间。之后,删除除最早的分支之外的所有分支。

我想知道是否有更清洁的方法可以做到这一点,如果没有,我如何检索用于创建分支的时间戳?

期望的结果:

master:      A-B-C-D-E----------------
                  \                   \
branch a:          F-H'      branch d: N-O
4

3 回答 3

0

好的,这可能不是最优雅的方式,但以下似乎可以解决问题:

git reflog <branch>

从上面的示例中,在“b”上运行它会返回类似的内容:

137c91f b@{0}: branch: Created from a

可以通过在与目标提交关联的每个分支上运行此命令来重建分支树。

于 2012-10-22T21:42:48.600 回答
0

1) 删除分支 C 2) 删除分支 B 我不确定 H' 是什么;我猜你想将提交 H 压缩到提交 G 中。

于 2012-10-23T01:06:43.450 回答
0

我会使用一个非常小的 shell 脚本。

#!/bin/bash

# identify the bad commit
BAD_COMMIT=$(git rev-parse "$1")

# loop through branches
for BRANCH in $(git for-each-ref --format="%(refname)" refs/heads); do
  # detect if the branch is in the history, for which fgrep will exit 0
  if (git rev-list $BRANCH | fgrep -q $BAD_COMMIT); then
    echo "Deleting $BRANCH"
    git branch -D $BRANCH
  else
    echo "Keeping $BRANCH"
  fi
done

另请参阅:SO 答案:遍历分支

于 2012-10-23T00:11:14.587 回答