web-dev-qa-db-ja.com

コミットメッセージでGitリポジトリを検索するにはどうすればいいですか?

私はコミットメッセージ "Build 0051"でいくつかのソースコードをGITにチェックインしました。

しかし、私はもうそのソースコードを見つけることができないようです - どうやったらコマンドラインを使ってGITリポジトリからこのソースを取り出すのですか?

アップデート

  1. SmartGITを使用して、バージョン0043、0047、0035、0046でチェックイン。
  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>
667
Contango

指定されたテキストのコミットログを(すべてのブランチにわたって)検索するには、次の手順を実行します。

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

リポジトリの履歴から実際のコミット内容を検索するには、次のようにします。

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

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

最後に、コミットがぶら下がっていて履歴にまったく関連していない場合の最後の手段として、-gフラグでreflog自体を検索できます(--walk-reflogsの略)。

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

編集:あなたがあなたの歴史を失ったように思われるなら、あなたの安全策としてreflogをチェックしてください。でリストされているコミットの1つでBuild 0051を探してください

git reflog

あなたは単にあなたのHEADを 'Build 0051'コミットが表示されない歴史の一部に設定したか、あるいは実際にそれを吹き飛ばしたかもしれません。 git-ready reflog という記事が役に立つかもしれません。

reflogからコミットを回復するには :あなたが見つけたコミットのgitチェックアウトをしてください(そして参照用に新しいブランチやタグを付けてください)

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
1044
shelhamer

これを私の〜/ .gitconfigに入れます。

[alias]
    find = log --pretty=\"format:%Cgreen%H %Cblue%s\" --name-status --grep

それから、 "git find string"とタイプすれば、その文字列を含むすべてのコミットの一覧がメッセージに表示されます。たとえば、チケット#33を参照しているすべてのコミットを見つけるには、次のようにします。

029a641667d6d92e16deccae7ebdeef792d8336b Added isAttachmentEditable() and isAttachmentViewable() methods. (references #33)
M       library/Dbs/Db/Row/Login.php

a1bccdcd29ed29573d2fb799e2a564b5419af2e2 Add permissions checks for attachments of custom strategies. (references #33).
M       application/controllers/AttachmentController.php

38c8db557e5ec0963a7292aef0220ad1088f518d Fix permissions. (references #33)
M       application/views/scripts/attachment/_row.phtml

041db110859e7259caeffd3fed7a3d7b18a3d564 Fix permissions. (references #33)
M       application/views/scripts/attachment/index.phtml

388df3b4faae50f8a8d8beb85750dd0aa67736ed Added getStrategy() method. (references #33)
M       library/Dbs/Db/Row/Attachment.php
70
Alex Howansky

少し遅れていますが、コミットメッセージに基づいてコミット(またはリビジョン)を指定するための専用の表記法である:/があります。検索文字列の前に:/を付けるだけです。

git show :/message

ここで<message>は空白からなる複雑な正規表現パターンになることがあるので、必要ならば引用符/エスケープを忘れないでください。例えば:

git log -1 -p ":/a few words"

あるいは、開始点を指定して、特定の点から到達可能な最も近いコミットを見つけることができる。例えば、

git show 'HEAD^{/fix nasty bug}'

参照: gitリビジョンマニュアル

23
ryenus
git log --grep=<pattern>
            Limit the commits output to ones with log message that matches the
            specified pattern (regular expression).
19
Josh Lee
git log --grep="Build 0051"

トリックをするべきです

13
Noufal Ibrahim

これを試して!

git log | grep -b3 "Build 0051"
7
Nic

最初にコミットのSHAを見つけるためにgit log --onelineを使い(Message)、次に正しい情報を見つけるためにSHAとともに最初のgit log --stat 8zad24dを使いました(8zad24d)。

2
Rida