Gitブランチがいつ作成されたかを判断する方法はありますか?私は自分のリポジトリにブランチを持っており、それを作成したことを覚えていません。作成のタイムスタンプを確認すると、私の記憶が揺さぶられる可能性があると思いました。
Gitブランチがいつ作成されたかを判断する方法はありますか?私は自分のリポジトリにブランチを持っており、それを作成したことを覚えていません。作成のタイムスタンプを確認すると、私の記憶が揺さぶられる可能性があると思いました。
回答:
使用する
git show --summary `git merge-base foo master`
gitkを使用してコンテキストで表示したい場合は、
gitk --all --select-commit = `git merge-base foo master`
(ここで、fooは探しているブランチの名前です。)
以下のようなコメントで指摘し、中Jackubの答え、限り、あなたのブランチがコンフィグ設定で設定した日数よりも若いとgc.reflogexpire
分岐リファレンスだったとき(デフォルトは90日です)、あなたは見つけるためにあなたのREFLOGを利用することができます最初に作成されました。
git reflog
ほとんどのgit log
フラグを取ることができることに注意してください。さらに、HEAD@{0}
スタイルセレクターは事実上時間の概念であり、実際には(ハッキングされた方法で)日付文字列として処理されます。つまり、フラグ--date=local
を使用して次のような出力を取得できます。
$ git reflog --date = local 763008c HEAD @ {2010年8月20日10:09:18}:プル:早送り f6cec0a HEAD @ {Tue Aug 10 09:37:55 2010}:プル:早送り e9e70bc HEAD @ {2010年2月4日02:51:10}:プル:早送り 836f48c HEAD @ {2010年1月21日14:08:14}:チェックアウト:マスターからマスターへの移行 836f48c HEAD @ {2010年1月21日14:08:10}:プル:早送り 24bc734 HEAD @ {2010年1月20日12:05:45}:チェックアウト:74fca6a42863ffacaf7ba6f1936a9f228950f657からの移行 74fca6a HEAD @ {Wed Jan 20 11:55:43 2010}:チェックアウト:マスターからv2.6.31に移行 24bc734 HEAD @ {2010年1月20日水曜日11:44:42}:プル:早送り 964fe08 HEAD @ {2009年10月26日15:29:29}}:チェックアウト:4a6908a3a050aacc9c3a2f36b276b46c0629ad91からの移行 4a6908a HEAD @ {Mon Oct 26 14:52:12 2009}:チェックアウト:マスターからv2.6.28に移行
時々それを使用することも役に立つかもしれません--date=relative
:
$ git reflog --date = relative 763008c HEAD @ {4週間前}:プル:早送り f6cec0a HEAD @ {6週間前}:プル:早送り e9e70bc HEAD @ {8か月前}:プル:早送り 836f48c HEAD @ {8か月前}:チェックアウト:マスターからマスターへの移行 836f48c HEAD @ {8か月前}:プル:早送り 24bc734 HEAD @ {8か月前}:チェックアウト:74fca6a42863ffacaf7ba6f1936a9f228950f657からマスターに移行 74fca6a HEAD @ {8か月前}:チェックアウト:マスターからv2.6.31に移行 24bc734 HEAD @ {8か月前}:プル:早送り 964fe08 HEAD @ {11か月前}:チェックアウト:4a6908a3a050aacc9c3a2f36b276b46c0629ad91からマスターに移行 4a6908a HEAD @ {11か月前}:チェックアウト:マスターからv2.6.28に移行
最後の注意:--all
フラグ(実際にはgit-reflogが理解するgit-logフラグ)は、すべての既知の参照の参照ログを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から作成
gc.reflogexpire
数日以内に行われます。
Pro Git§3.1 Gitブランチ-ブランチとは、Gitブランチが実際に何であるかをよく説明しています
Gitのブランチは、[a]コミットへの軽量で移動可能なポインタです。
ブランチは単なる軽量なポインタであるため、gitにはその履歴や作成日を明示的に示すものはありません。「しかし、ちょっと待ってください」とあなたが言うのを聞きます、「もちろんgitは私のブランチ履歴を知っています!」まあ、ちょっと。
次のいずれかを実行した場合:
git log <branch> --not master
gitk <branch> --not master
「ブランチの履歴」のように見えますが、実際にはマスターから到達できない「ブランチ」から到達可能なコミットのリストです。これにより必要な情報が得られますが、「ブランチ」をマスターにマージしたことがなく、作成後にマスターを「ブランチ」にマージしたことがない場合に限ります。あなたがいる場合しているマージされ、その後、差異のこの歴史は崩壊します。
幸い、reflogには、他のさまざまな回答で説明されているように、必要な情報が含まれていることがよくあります。これを使って:
git reflog --date=local <branch>
ブランチの履歴を表示します。このリストの最後のエントリは、(おそらく)ブランチを作成したポイントです。
ブランチが削除されている場合、 'branch'はもはや有効なgit識別子ではありませんが、代わりにこれを使用できます。
git reflog --date=local | grep <branch>
または、Windows cmdシェルで:
git reflog --date=local | find "<branch>"
reflogはリモートブランチでは効果的に機能せず、ローカルで作業したブランチのみが機能することに注意してください。
git reflog --date=local <branch>
まず、ブランチがgc.reflogexpire
数日(デフォルトでは90日、つまり約3か月)以内に作成された場合、git log -g <branch>
またはgit reflog show <branch>
を使用してreflogの最初のエントリを見つけることができます。これは作成イベントであり、以下のようになります(の場合git log -g
):
Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>
誰がブランチを作成したか、何日前にどのブランチから作成したかがわかります(まあ、それは単に「HEADから作成された」ので、あまり役に立ちません)。
それはマイクセップが彼の答えで言ったことです。
次に、ブランチが長くgc.reflogexpire
実行された場合git gc
(または自動的に実行された場合)、作成元のブランチを持つ共通の祖先を見つける必要があります。構成ファイルを見てください。おそらくbranch.<branchname>.merge
、このブランチが基づいているブランチを示すエントリがあります。
たとえば、問題のブランチがマスターブランチ(マスターブランチから分岐)から作成されたことがわかっている場合は、次のコマンドを使用して共通の祖先を表示できます。
git show $(git merge-base <branch> master)
git show-branch <branch> master
代わりにを試すこともできます。
これはgbaconが彼の応答で言ったことです。
gitコマンドについてはまだわかりませんが、reflogsで見つけることができると思います。
.git/logs/refs/heads/<yourbranch>
ファイルにUNIXタイムスタンプが含まれているようです。
更新:ログを印刷するときに、コミット履歴の代わりにreflog履歴を使用するオプションがあるようです。
git log -g
このログをたどって、ブランチを作成した時点に戻ることもできます。git log
ただし、reflogにエントリを作成したアクションを実行した日付ではなく、コミットの日付を表示しています。上記のパスの実際のreflogを調べた場合を除いて、まだそのことはわかりません。
これを試して
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
%
以前に必要かもしれません(refname)
| cut -c 5- | sort -r |
パイプで通してから、その月のgrepをパイプで通して、多かれ少なかれ日付順のリストを逆にしてくれました。
--sort='-committerdate'
の前に「-」があることに注意してください)。
使用する:
git reflog
現在のフォルダにあるリポジトリのすべてのライフサイクルを表示します。最初に表示されるブランチ名(下から上)が作成されたソースです。
855a3ce HEAD@{0}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{1}: checkout: moving from feature-sut-46 to development
855a3ce HEAD@{2}: checkout: moving from feature-jira35 to feature-sut-46
535dd9d HEAD@{3}: checkout: moving from feature-sut-46 to feature-jira35
855a3ce HEAD@{4}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{5}: checkout: moving from feature-jira35 to development
535dd9d HEAD@{6}: commit: insert the format for vendor specific brower - screen.css
855a3ce HEAD@{7}: checkout: moving from development to feature-jira35
855a3ce HEAD@{8}: checkout: moving from master to development
つまり:
ブランチ開発がマスターから作成されます(チェックアウト-b)
ブランチfeature-jira35が開発から作成されます(チェックアウト-b)
ブランチfeature-jira-sut-46が開発から作成されます(チェックアウト-b)
このコマンドショーブランチの作成日dev
からmain
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
すべてのブランチの詳細を取得したい場合
for i in `git branch -r | tail -n +2 `;do git log --reverse $i|grep -A 2 -B 2 `echo $i | awk -F'origin/' '{print $2}'` |head -n 4; done
私は最善の方法を見つけました:この方法で作成された最新のブランチを常にチェックします
git for-each-ref --sort=-committerdate refs/heads/
Andrew Sohn(https://stackoverflow.com/a/14265207/1929406)からの回答と組み合わせる
branchcreated=$(git reflog show --date=format:'%Y-%m-%d %H:%M:%S' --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1| cut -d'{' -f 2| cut -d'}' -f 1 | xargs)
echo $branchcreated
これでうまくいきました:(10年後)
git log [--remotes] --no-walk --decorate
ブランチの作成時間に関する情報が保存されていないため--no-walk
、これは、各ブランチの最初のコミット()を表示することであり、コミットの日付が含まれます。--remotes
リモートブランチの場合は使用し、ローカルブランチの場合は省略します。
別のブランチを作成する前にブランチで少なくとも1つのコミットを行うため、これにより、ドキュメント作成のためにブランチの作成(および機能dev-start)の数か月を遡ることができました。
出典:stackexchangeの AnoE