204

次のようなグラフがあるとしましょう。

A---B---C---D (master)
     \
      \-E---F (HEAD)

そうした場合git log --all --oneline、6つのコミットすべてを取得します。

しかし、グラフが

A---B---C---D (master, HEAD)
     \
      \-E---F

EとFは表示されません。名前が付けられていないブランチのコミットを含め、すべてのコミットをgitに通知してもらえますか?

ありがとう

4

12 に答える 12

195

試す:

git log --reflog

git reflogこれは、reflogs( )で言及されているすべてのオブジェクトがコマンドラインに。としてリストされているふりをして、すべてのgitコミットをリストします<commit>

于 2015-12-31T15:41:43.060 に答える
69

特に簡単ではありません-枝の先端へのポインタを失った場合、それは干し草の山で針を見つけるようなものです。もう参照されていないように見えるすべてのコミットを見つけることができます-これはあなたのために行われます-しかし、それはあなたがリベースしたブランチの古いコミットなどのgit fsck --unreachable後に捨てたコミットを含みます。したがって、これらすべてのコミットを見るgit commit --amend一度に情報が多すぎて通り抜けられない可能性があります。

ですから、簡単な答えは、興味のあることを見失わないでください。もっと深刻なことに、reflogsは、デフォルトで過去60日間ほど使用したすべてのコミットへの参照を保持します。さらに重要なことに、それらはそれらのコミットが何であるかについてのコンテキストを提供します。

于 2011-01-24T20:49:46.343 に答える
60

この問題に取り組むときは、次のコマンドを使用します。

git reflog |  awk '{ print $1 }' | xargs gitk

これにより、ヘッドレスになった最近のコミットを視覚化できます。

私はこれをと呼ばれるスクリプトヘルパーにまとめました~/bin/git-reflog-gitk

于 2014-05-21T10:45:50.857 に答える
55

私の命を救ったのは次のコマンドでした:

git reflog

そこに、次のようにgitに対して行われた履歴コミットの画面があります。

ここに画像の説明を入力してください

この時点で、HEAD@{X}必要なものを見つけて一時的なブランチを作成し、次のように移動するだけです。

git checkout -b temp_branch HEAD@{X}

そうすれば、gitリポジトリをリベースしたり壊したりすることなく、コミットが失われた一時的なブランチを作成できます。

お役に立てれば...

于 2019-05-16T07:13:37.500 に答える
29

@Kieranの回答と同様ですが、コンソールの場合: git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')

于 2015-05-29T01:41:42.567 に答える
10
git log --reflog

助かりました!HEADをマージしているときに失くしてしまい、レイトコミットが見つかりませんでした。ソースツリーには表示されませんが、git log --reflog以前にすべてのローカルコミットを表示します

于 2020-04-21T11:59:53.730 に答える
9

この問題をどのように解決しますか?使用git fsckとロギング!

まず、失われた(到達不能な)コミットとBLOBを含むファイルを作成します。(注:次のようなことをした場合git gc、コミットされたすべてのコミットがガベージコレクションされ、ここでは見つかりません!)

$git fsck --lost-found > lost_found.commits

これにより、次のようなファイルが作成されます。

ダングリングコミットdec2c5e72a81ef06963397a49c4b068540fc0dc3
ダングリングブロブf8c2579e6cbfe022f08345fa7553feb08d60a975
ダングリングブロブ0eb3e86dc112332ceadf9bc826c49bd371acc194
ダングリングブロブ11cbd8eba79e01f4fd7f496b1750953146a09502
ダングリングコミット18733e44097d2c7a800650cea442febc5344f9b3
ダングリングブロブ1e53a5cdb3ecdde27081ec6e8b31e4070106ee05

次に、お気に入りのテキストエディタでこのファイルを開いて、そこからコミット/ブログハッシュをコピーできます。(**vimマクロはこの**に最適です)

これで、このコミットからのようなものでログバックできますgit log --oneline <commit hash>。または、gitk、tig、またはその他のgitビューアが機能するはずです。

あなたの場合、コミットFのハッシュが見つかった場合、ログには次のようなものが表示されます。

A---B---E---F

早くて簡単!これで、これらすべてのぶら下がっているコミットの背後にあるコンテキストを見つけることができます。

PSはい、私は知っています、遅い投稿ですが、まあ、誰かがここでそれを見つけて、それが役に立つと思うかもしれません。(私がこれを再びグーグルするとき、ほとんどの場合、6ヶ月で私になります)

于 2014-12-10T16:04:58.437 に答える
5

にあるreflogを見て、コミットを回復することができました。.git/logs/HEAD

次に、ファイルの最後までスクロールする必要があり、失ったコミットを見つけました。

于 2013-12-18T09:51:38.083 に答える
5

すべてのコミットgit logの詳細を取得するのはよくない場合があるので、これを表示するには...

Macの場合:gitプロジェクトに入り、次のように入力します。

$ nano .git/logs/HEAD

その中のすべてのコミットを表示するには、または:

$ gedit .git/logs/HEAD

その中ですべてのコミットを表示するには、

その後、お気に入りのブラウザで編集できます。

于 2014-03-22T08:16:56.553 に答える
3

@bsimmons

git fsck --lost-found | grep commit

次に、それぞれにブランチを作成します。

$ git fsck --lost-found | grep commit
Checking object directories: 100% (256/256), done.
dangling commit 2806a32af04d1bbd7803fb899071fcf247a2b9b0
dangling commit 6d0e49efd0c1a4b5bea1235c6286f0b64c4c8de1
dangling commit 91ca9b2482a96b20dc31d2af4818d69606a229d4

$ git branch  branch_2806a3 2806a3
$ git branch  branch_6d0e49 6d0e49
$ git branch  branch_91ca9b 91ca9b

これで、多くのツールで、失われたコミットをグラフィカルに視覚化できます。

于 2017-07-17T14:01:12.623 に答える
3

実際git fsckには、失われたすべてのコミットを見つけるために使用できます。適切なオプションが必要です。

git fsck --unreachable --no-reflogs

--unreachable一部のコミットはまだreflogによって参照される可能性があるため、単独では十分ではありません。コミット履歴全体をかなり明確に表示する必要がある場合は、次のようなエイリアスを作成できます。

git log --all --decorate --oneline --graph $(git fsck --no-reflogs --unreachable | awk '{if ($2 == "commit") print $3}')

正直なところ、この最後のコマンドで--unreachableオプションが必要かどうかはわかりません。git logデフォルトで祖先をトラバースする場合(指定されていない場合--no-walk)。賭けはしませんが、必要ないと思います。

于 2021-06-15T06:53:12.237 に答える
2

Git Extensions GUIを使用する場合、[表示]-> [reflog参照の表示]をオンにすると、ぶら下がっているコミットをグラフィカルに視覚化できます。これにより、他のすべての参照されているコミットと同様に、ツリーにぶら下がっているコミットが表示されます。このようにして、探しているものを見つけるのがずっと簡単になります。

デモについては、この画像を参照してください。画像のコミットC2、C3、C4、およびC5はぶら下がっていますが、まだ表示されています。

于 2018-07-11T16:28:43.897 に答える