1. ホーム
  2. ギット

[解決済み】コミットメッセージでGitリポジトリを検索する方法とは?

2022-03-23 18:45:39

質問

あるソースコードをコミットメッセージ "Build 0051" とともにGITにチェックインしました。

しかし、そのソースコードがもう見つからないようです。GITリポジトリからコマンドラインを使って、このソースを抽出するにはどうしたらよいでしょうか?

更新情報

  1. バージョン0043、0044、0045、0046でSmartGITを使用して確認しました。
  2. 0043 をチェックアウトし、0051 までのバージョンを別のブランチでチェックインしました。
  3. 再度0043をチェックアウト。
  4. 現在、0051は消滅しています。

更新情報

ソースコードは間違いなく存在します、あとはチェックするだけです。

C:\Source>git log -g --grep="0052"
commit 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
Reflog: HEAD@{10} (unknown <Mike@.(none)>)
Reflog message: commit: 20110819 - 1724 - GL: Intermediate version. File version:  v0.5.0 build 0052.
Author: unknown <Mike@.(none)>
Date:   Fri Aug 19 17:24:51 2011 +0100

    20110819 - 1724 - GL: Intermediate version. File version: v0.5.0 build 0052.

C:\Source>

解決方法は?

与えられたテキストについて、(すべてのブランチにわたる)コミットログを検索するには。

git log --all --grep='Build 0051'

レポの履歴から実際のコミットの内容を検索するには、以下を使用します。

git grep 'Build 0051' $(git rev-list --all)

で、与えられたテキスト、含むファイル名、コミット sha1 のすべてのインスタンスを表示します。

最後に、コミットがぶらぶらしていて履歴にまったくつながっていない場合の最後の手段として、reflog 自体を検索することができます。 -g フラグを使用します。 --walk-reflogs :

git log -g --grep='Build 0051'

EDIT: もし、履歴が消えてしまったようであれば、次のように確認してください。 reflog をセーフティネットとして使用します。がリストアップしたコミットの中からBuild 0051を探します。

git reflog

を単純に設定しただけかもしれません。 HEAD を、'Build 0051' コミットが見えないような履歴の部分に移動させるか、あるいは実際にそれを吹き飛ばしたかもしれません。その git-ready reflog の記事が参考になるかもしれません。

reflogからコミットを復元するには : 見つけたコミットを git checkout してください (オプションで、参照用に新しいブランチやタグを作成することもできます)。

git checkout 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
# alternative, using reflog (see git-ready link provided)
# git checkout HEAD@{10}
git checkout -b build_0051 # make a new branch with the build_0051 as the tip