2016-08-07 3 views

答えて

2

によってグループ化されます。 reflogは、の参照への更新のレコードに過ぎず、の参照自体は、単にブランチとタグの名前と特殊名の一般化であるHEADです。

通常、Reflogは(あなたのような)クライアントリポジトリで有効になっており、通常はサーバーリポジトリでは無効になっています。これは当然、十分に設定可能です。彼らのreflogを見るために主に使用するフロントエンドコマンドはgit reflogです。あなたが好きなら今すぐ実行することができますが、そのようにすると%geなどの説明に役立ちません。だから私たちは何か違うことをやろう:実行git log -g

git reflogを実行すると、基本的にgit log --oneline -gが実行されます。 git log -gを自分で実行すると、--onelineを省略することができ、したがって各reflogエントリに複数の行が表示されます。

出力は名前とメールアドレスと、次のようになりますが変更されました:

commit 08b876daae9944d1a6fba271cfcd9629c13dfd69 
Reflog: [email protected]{0} (A U Thor <[email protected]>) 
Reflog message: commit: initial torturetest code 
Author: A U Thor <[email protected]> 
Date: Sun Aug 7 01:59:31 2016 -0700 

    initial torturetest code 

commit 8bb118938b5c6a2978f13e74525b594a48226571 
Reflog: [email protected]{1} (A U Thor <[email protected]>) 
Reflog message: checkout: moving from master to torturetest 
Author: Someone Else <[email protected]> 
Date: Sat Jul 16 02:00:46 2016 +0200 

    Allow backend ... 

を最新のコミットは、私は(まあ、今朝)昨晩作っ一つです。これは[email protected]{0}です。これはコミットを表します(その真の名前は08b87...で始まる大きな醜いSHA-1ハッシュです)。コミット自体には作者(私は表示目的で名前を変更しましたが)、日付、コミットメッセージなどがありますが、reflogエントリ[email protected]{0},には著者(私)、日付、およびメッセージ。この場合

コミットの作者とREFLOG著者は同じあります。 reflogメッセージでさえ、基本的にコミット主題と同じです(Reflog message:という行は、commit:と同じように挿入されています)。だからそれほど役に立ちませんが、次の例を見てください。コミット8bb11...

このREFLOGエントリはREFLOG著者、およびは作者をコミットすると、他の誰かのようにを持っています。 さらに、メッセージ,checkout: moving from master to torturetestのreflogはコミットの件名と完全に無関係であり、これはAllow backendで始まります。あなたは、これはこれらのgit log -g --onelineまたはgit reflog -bothから短い出力と比較した場合

はコミットIDとREFLOGセレクターと一緒に、唯一REFLOGメッセージを参照してください-you'll HEADためREFLOGを調べます。

もう1つのことはここで注目する価値があります。通常のgit log出力では、それぞれのコミットは通常に一度だけ表示されます。ただし、git log -gの出力では、Gitはreflog自体に格納されているハッシュIDを調べているので、コミットが繰り返し表示されることがあります。同じコミットを指しているブランチ間を行き来するか、git resetを使用してブランチを先に指し示したコミットに戻すか、またはgit rebaseを実行するか、同様のものをいくつでも実行すると、簡単に取得できますこれは複数の異なるreflogエントリで同じコミットを指しているHEADのブランチ名の両方に適用されます。 (私はこれはおそらく約-だけでなくて、あまりにも多くのGitのコマンドを実行していたものを、本当にわからないんだけど

08b876d [email protected]{0}: commit: initial torturetest code 
8bb1189 [email protected]{1}: checkout: moving from master to torturetest 
8bb1189 [email protected]{2}: checkout: moving from torturetest to master 

:私の場合は

は、例えば、私は明らかに名前torturetestか何かにビットをvacillated 。私は:-)中だったリポジトリ思い出す)あなたの質問に直接戻る

はREFLOGアイデンティティは何ですか?

各reflogエントリに格納されている名前と電子メールアドレスです。自分のクライアント上のプライベートGitリポジトリの場合、これらはすべて常に同じである可能性があります。しかし、いつでもgit config --global user.name "New User Name"git config --global user.email [email protected]を実行して変更することができるので、が変わることがあります。あなたは不思議に取得する場合、他の誰かが、またコミッターであること


。コミットの作成者とコミッター、および対応する日付と電子メールアドレスは、コミット自体に格納されます。 reflogの作成者、日付、および電子メールアドレスは、reflogエントリに格納されます。今日は平文のテキストファイルなので、.git/logs/HEAD.git/logs/refs/heads/masterを見ると、元のreflogデータを見ることができます。書式はあまり詳しくは書かれていませんが、かなり明白です:それは参照のための古い値と新しい値を持っています。 reflogの著者、電子メール、および日付スタンプ情報。およびreflogメッセージgit log -m -pへの分割を使用してマージがコミットしたときに、ここで

例外は、当然のreflogs自分自身のための1つの横に、発生します。通常git logはマージコミットを完全にスキップし、git showの差分をと表示します。 (Combined diffのドキュメントはStackOverflowの "combined diffs"という用語では多少埋もれています)

git logにdiffを表示させると、diffも表示されます。どのような場合でも、結合された差分は重要な情報を省略することができるので、これらのコマンドに異なることを伝えることができます。マージの各親に対して、その特定の親のツリーに対してマージコミットのツリーの差分を生成します。これは、-mフラグの機能です。

親#1に対してコミットの差分コミット1234567...を表示すると、Gitはマージコミット情報を表示してから差分を表示します。次に、親#2に対して差異コミット1234567...を表示すると、Gitは2番目の差分の前にマージコミット情報を再度表示します。したがって、これはgit logが同じコミットを複数回表示する方法です。

git -c user.email=whateverを使用することもできますし、この場合は特殊なGit環境変数を使用することもできます。 git -cを使用すると、the answer I wrote recently about Git diff color optionsのように、一回限りのテストに特に便利です。

+0

驚くべき回答!どうもありがとうございました! – Mitar

0

git reflogが別のコマンドです。

HEADが変更されるたびに、gitはその古い値を.git/logフォルダに保存し、git reflogコマンドで表示できます。

"REFLOGアイデンティティ"のmeanning

は単純です:

各コミットは、著者とタイトルこれらはREFLOGエントリを参照してください

関連する問題