Git ブランチがいつ作成されたかを判断する方法はありますか? 私はレポにブランチを持っていますが、それを作成したことを覚えていないので、作成のタイムスタンプを見ると記憶が揺さぶられるのではないかと思いました。
15 に答える
コメントとJackub's answerで指摘されているように、ブランチが構成設定で設定された日数(デフォルトは 90 日) よりも若い限り、reflog を利用してブランチ参照がいつ行われたかを確認できます。最初に作成。gc.reflogexpire
git reflog
ほとんどのgit log
フラグを使用できることに注意してください。HEAD@{0}
さらに、スタイル セレクターは実質的に時間の概念であり、実際には (ハッキングされた方法で) 日付文字列として処理されることに注意してください。これは、フラグ--date=local
を使用して次のような出力を取得できることを意味します。
$ git reflog --date=ローカル 763008c HEAD@{Fri Aug 20 10:09:18 2010}: pull : 早送り f6cec0a HEAD@{Tue Aug 10 09:37:55 2010}: pull : 早送り e9e70bc HEAD@{Thu Feb 4 02:51:10 2010}: pull : 早送り 836f48c HEAD@{Thu Jan 21 14:08:14 2010}: チェックアウト: マスターからマスターへの移動 836f48c HEAD@{Thu Jan 21 14:08:10 2010}: pull : 早送り 24bc734 HEAD@{Wed Jan 20 12:05:45 2010}: チェックアウト: 74fca6a42863ffacaf7ba6f1936a9f228950f657 から移動 74fca6a HEAD@{Wed Jan 20 11:55:43 2010}: チェックアウト: マスターから v2.6.31 への移行 24bc734 HEAD@{Wed Jan 20 11:44:42 2010}: pull : 早送り 964fe08 HEAD@{Mon Oct 26 15:29:29 2009}: チェックアウト: 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 から移動 4a6908a HEAD@{Mon Oct 26 14:52:12 2009}: チェックアウト: マスターから v2.6.28 への移行
を使用すると便利な場合もあります--date=relative
。
$ git reflog --date=相対 763008c HEAD@{4 週間前}: pull : 早送り f6cec0a HEAD@{6 週間前}: pull : 早送り e9e70bc HEAD@{8 months ago}: pull : 早送り 836f48c HEAD@{8 か月前}: チェックアウト: マスターからマスターに移動中 836f48c HEAD@{8 months ago}: pull : 早送り 24bc734 HEAD@{8 か月前}: チェックアウト: 74fca6a42863ffacaf7ba6f1936a9f228950f657 からマスターに移動中 74fca6a HEAD@{8 か月前}: チェックアウト: マスターから v2.6.31 に移行中 24bc734 HEAD@{8 months ago}: pull : 早送り 964fe08 HEAD@{11 か月前}: チェックアウト: 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 からマスターに移動中 4a6908a HEAD@{11 か月前}: チェックアウト: マスターから v2.6.28 に移行中
最後の注意:--all
フラグ (実際には git-reflog によって理解される git-log フラグです) は、すべての既知の refs の reflog をrefs/
(単純に ではなくHEAD
) に表示します。これにより、分岐イベントが明確に表示されます。
git reflog --date=local --all 860e4e4 refs/heads/master@{Sun Sep 19 23:00:30 2010}: コミット: 2 番目。 17695bc refs/heads/example_branch@{Mon Sep 20 00:31:06 2010}: ブランチ: HEAD から作成
使用する
git show --summary `git merge-base foo master`
gitk を使用してコンテキストで表示したい場合は、
gitk --all --select-commit=`git merge-base foo master`
(foo は、探しているブランチの名前です。)
まず、ブランチが数日以内に作成された場合gc.reflogexpire
(デフォルトでは90日、つまり約3か月)、git log -g <branch>
またはを使用git reflog show <branch>
してreflogの最初のエントリを見つけることができます。これは作成イベントであり、次のようになります(for git log -g
):
Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>
誰がブランチを作成したか、何回前に操作したか、どのブランチから作成したかを取得します(まあ、それは単に「HEADから作成」である可能性がありますが、あまり役に立ちません)。
それはMikeSepが彼の答えで言ったことです。
次に、より長いブランチがgc.reflogexpire
あり、実行したgit gc
(または自動的に実行された)場合は、作成元のブランチと共通の祖先を見つける必要があります。設定ファイルを見てください。おそらくbranch.<branchname>.merge
、これがどのブランチに基づいているかを示すエントリがあります。
たとえば、問題のブランチがマスターブランチから作成された(マスターブランチから分岐した)ことがわかっている場合は、次のコマンドを使用して共通の祖先を確認できます。
git show $(git merge-base <branch> master)
別の方法として、を試すこともできますgit show-branch <branch> master
。
これはgbaconが彼の応答で言ったことです。
git コマンドについてはまだわかりませんが、reflog で見つけることができると思います。
.git/logs/refs/heads/<yourbranch>
ファイルに UNIX タイムスタンプが含まれているようです。
更新:ログを印刷するときに、コミット履歴の代わりに reflog 履歴を使用するオプションがあるようです。
git log -g
ブランチを作成したときまでさかのぼって、このログをたどることもできます。git log
ただし、reflog にエントリを作成したアクションを実行した日付ではなく、コミットの日付を表示しています。上記のパスの実際の reflog を調べる以外は、まだ見つけていません。
このコマンドは、dev
からのブランチの作成日を表示しますmain
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
これは、このスレッドを見つける前に私が思いついたものです。
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep 'branch:'