git がこの情報を永続的に保存するわけではないのは事実ですが、とにかく調べることができます。Git には reflog があります。
git reflog show <branch>
ブランチが過去 90 日以内に作成された場合 (デフォルトでは、 を使用gc.reflogExpire
してこれを変更します)、その reflog の最後の行がブランチの作成になります。
ここで知りたいのは、分岐元のブランチではなく、ブランチが作成されたコミットであると想定しています。それを見つけるのははるかに難しいでしょう-私の最善の推測は、各ブランチについて、ターゲットブランチが作成された時点でその位置を取り、ターゲットブランチの開始点が含まれているかどうかを確認することです.
ここでの話の教訓は、どのブランチから分岐したかがわかるワークフローを採用する必要があるということです。新しい機能とバグ修正は、マスター ブランチの安定した時点で開始される可能性が高く、サブトピック ブランチに<topic>-<subtopic>
はリマインダーとして名前を付けることができます。
編集:
さて、コミットと時間 (この場合は、ブランチが作成されたコミットと時間) を知っているとしましょう。そのコミットがその時点でどのブランチにあったかを調べようとしています。
git for-each-ref --format='%(refname)' refs/heads/* | while read b; do
if [ "$(git rev-parse $b@{$date_time})" = "$target_commit" ]; then
echo "branch $b contained commit $target_commit at $date_time"
fi
done
それはbashスクリプト/ワンライナーとして機能するはずだと思います。アイデア: すべてのブランチについて、指定された日時にその位置を取り、それがターゲット コミットであるかどうかを確認します。さらに柔軟にしたい場合$(git merge-base $(git-rev-parse $b@{$date_time}))
は、ターゲットコミットであるかどうかをテストできます。つまり、ターゲットコミットがその時点で特定のブランチの祖先であったかどうか。
そしてもちろん、履歴が比較的きれいな場合は、いつでもgitk --branches
orgit log --graph --branches [--oneline]
を使用して素敵な写真を見ることができます。