2017-06-19 13 views
0

コミット後、私は切り離されたHEAD状態になっていることを思い出します。`git log --all`はコミットポイントを逃すことができますか?

> git commit -m "Implemented Runrealfast algorithm" 
[detached HEAD af46ac9] Implemented Runrealfast algorithm 
2 files changed, 18 insertions(+), 1 deletion(-) 

私は切り離さHEADを無視し、コミットポイントのカップルに後戻り:道に沿ってgit stash -uを実行している間

> git checkout 87e147e 
> git stash -u 
> git checkout ed157a3 

は最終的に私は、以前の

> git log --all | grep Runrealfast 
(no output) 

ていたが、それをgit log --all表示されませんコミットSHAを探してみてください。

幸いにも私の端末には完全な履歴があります。ターミナルのメッセージから関連するSHAを特定して実行します。

> git checkout af46ac9 

問題のコミットは問題なく表示されます。

git log --allはどのようにコミットポイントを見逃すことができますか?切り離されたHEADもぶら下がっているのですか? Git docsから

+0

を追加する必要があります。コミット '87e147e'と' ed157a3'をチェックすると 'HEAD'が' af46ac9'から離れてしまいました。したがって、それはもはや参照されず、 'git log'によって到達されません。 – mkrieger1

答えて

1

--allにコミットが見逃される理由はいくつかあります。それは奇妙に聞こえるかもしれませんが、事は--allという意味ではありません。はすべてコミットです。

むしろ--allは「すべての参照」を意味します。したがって、現在のHEADコミットのすべての履歴(すべてのブランチ、すべてのタグ、すべてのリモート追跡ブランチ、filter-branchによって作成されたすべてのバックアップ参照、最新の隠し、おそらくその他のオッズと終了)を取得できます。 (なぜ単純化されたのですか?私はそれに戻ってきます)

あなたのコミットはそれらのどれもありません。あなたは尋ねました:"切り離されたHEADもまたぶら下がっていますか?"答えは:いいえ ...しかし、あなたの場合、並べ替え。

デタッチド・ヘッドとは、あなたが現在支店にいないということです。あなたはぶら下がっている可能性があります。または、1つまたは複数のrefの履歴にあるコミットがあるかもしれませんが、ブランチ名ではなく、リモートブランチのref名、SHA ID、タグ名などをチェックアウトしてそこに行きます。

しかし、あなたが分離ヘッド状態にあり、あなたが新しいコミットをした場合、その新しいコミットはぶら下がりコミットとして始まります。

そのような状況で

、コミット見つけるための最も確実な方法はHEAD

git reflog 

か、あなたは出力がgit log出力に見えるようにしたい場合は、

git log --reflog 
ためREFLOGを見ることです

これは、ダングリングコミットが作成されたリポジトリ内でのみカウントされます(おそらく、コミットを持つ唯一のレポです)。コミットが作成された後の妥当な時間内に(最終的にログの有効期限が切れます)コミットログを明示的に破損していないことを確認します(reflogの有効期限を強制するコマンドを使用するか、.git/logsディレクトリを使用する)。 git log --allはそれはREFの歴史の中でであってもコミットをスキップする時間があります:私は歴史は「簡略化」だったと述べところで

、。これはgitが、問題のあるコミットを含めずに各refでファイルの現在の状態を説明できると判断するためです。 gitの意味の詳細は、git log docsを参照してください。 --full-history--all

2

--all

refs/内のすべての参照文献は、HEADとともに、<commit>としてコマンドラインにリストされているかのようにふり。

以前に切り離されたHEADからのコミットはref(大まかに言えば、名前はありません)ではないため、リストされていません。

コミットに戻るには、git reflogは、ターミナル考古学で見つけるよりも便利です。

関連する問題