Gitブランチが作成されたときにを決定する方法はありますか?私は自分のレポにブランチを持っています、そして私はそれを作成することを覚えていません、そしておそらく作成タイムスタンプを見ることは私の記憶をジョギングするだろうと思いました。
つかいます
git show --summary` git merge-base foo master`
Gitkを使って文脈で見たければ、
gitk --all --select-commit = `git merge-base foo master`
(fooはあなたが探しているブランチの名前です。)
あなたのブランチが設定gc.reflogexpire
で設定された日数よりも若い限り、 コメントに書かれている そして Jackub's answer になっています(デフォルトは90日です)その後、あなたのreflogを利用してブランチ参照が最初に作成された時を見つけることができます。
git reflog
はほとんどのフラグを取ることができます git log
フラグ。 HEAD@{0}
スタイルのセレクタは事実上時間の概念であり、実際には(ハッキングされた方法で)日付文字列として扱われることにさらに注意してください。つまり、フラグ--date=local
を使用して、次のように出力を取得できます。
$ git reflog --date = local 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}:checkout:マスターから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}:checkout:マスターからv2.6.28への移行
--date=relative
を使うことも時々役に立つかもしれません:
$ git reflog --date = relative 763008c HEAD @ {4週間前}:pull:早送り f6cec0a HEAD @ {6週間前}:pull:早送り e9e70bc HEAD @ {8か月前}:pull:早送り 836f48c HEAD @ {8か月前}:チェックアウト:マスターからマスターへの移動 836f48c HEAD @ {8か月前}:pull :早送り 24bc734 HEAD @ {8か月前}:チェックアウト:74fca6a42863ffacaf7ba6f1936a9f228950f657からmaster 74fca6a HEAD @ {8か月前}:チェックアウト:masterからv2.6.31 。] 24bc734 HEAD @ {8か月前}:pull:早送り 964fe08 HEAD @ {11か月前}:チェックアウト:4a6908a3a050aacc9c3a2f36b276b46c0629ad91からmaster 4a6908a HEAD @ {11か月前}:チェックアウト:マスターからv2.6.28への移行
最後の注意:--all
フラグ(これは実際にはgit-reflogによって理解されるgit-logフラグです)は、分岐イベントを明確に示す(HEAD
name__ではなく)refs/
内のすべての既知のrefに対するreflogを表示します。
git reflog --date = local --all 860e4e4 refs/heads/master @ {Sun Sep 19 23:00:30 2010}:commit:2番目。 17695bc refs/heads/example_branch @ {Mon Sep 20 00:31:06 2010}:branch:HEAD から作成されました
Pro Git§3.1 Gitの分岐 - 分岐とは は、Gitの分岐が実際に何であるかについての良い説明を持っています
Gitのブランチは単に[a] commitへの軽量の移動可能なポインタです。
ブランチは単なる軽量のポインタなので、gitにはその履歴や作成日についての明確な概念はありません。 「しかし、待ってください。もちろん、gitは私のブランチの歴史を知っています」と言うのです。そうですね。
次のいずれかを実行したとします。
git log <branch> --not master
gitk <branch> --not master
「ブランチの履歴」のように見えますが、実際にはmasterからは到達できない 'branch'から到達可能なコミットのリストです。これはあなたが欲しい情報をあなたに与えます、しかしあなたが 'branch'をmasterにマージしたことがなくそしてそれを作って以来masterを 'branch'に決してマージしたことがない場合に限り。あなたがをマージした場合、この違いの歴史は崩壊するでしょう。
幸いなことに、ここで他のさまざまな答えで説明されているように、reflogには必要な情報が含まれています。これを使って:
git reflog --date=local <branch>
枝の歴史を示すために。このリストの最後のエントリは、(おそらく)ブランチを作成した場所です。
ブランチが削除された場合、 'branch'はもはや有効なgit識別子ではありませんが、代わりにこれを使用することができます。
git reflog --date=local | grep <branch>
またはWindowsのcmdシェルの場合:
git reflog --date=local | find "<branch>"
Reflogはリモートブランチでは効果的に機能しないことに注意してください。ローカルで作業したものだけです。
最初に、ブランチがgc.reflogexpire
日(デフォルトでは90日、つまり約3か月)以内に作成された場合、git log -g <branch>
またはgit reflog show <branch>
を使用してreflogの最初のエントリを見つけることができます。イベント、以下のようなもの(git log -g
の場合):
Reflog: <branch>@{<nn>} (C R Eator <[email protected]>)
Reflog message: branch: Created from <some other branch>
誰がブランチを作成し、何回前に操作を行い、どのブランチから作成したかを取得します(まあ、それは単に "Created from 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を調べる以外に、私はまだそれを見つけていません。
これを試して
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
つかいます:
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)
これは私がこのスレッドを見つける前に思いついたことです。
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:'
このコマンドは、dev
からのブランチmain
の作成日を表示します。
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
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