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

非常に小さなシェルスクリプトを使用します。

#!/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 に答える