Как выполнить поиск в репозитории Git с помощью сообщения фиксации?

Я проверил некоторый исходный код в GIT с сообщением фиксации "Build 0051".

Тем не менее, я не могу найти этот исходный код больше - как мне извлечь этот источник из GIT-репозитория, используя командную строку?

Обновить

  1. Проверено в версиях 0043, 0044, 0045 и 0046 с использованием SmartGIT.
  2. Проверил 0043, и проверил в версиях до 0051 в другой ветке.
  3. Снова проверил 0043.
  4. Теперь 0051 исчез.

Обновить

Исходный код определенно есть, теперь его нужно проверить:

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

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

C:\Source>

Ответ 1

Чтобы выполнить поиск журнала фиксации (по всем ветвям) для заданного текста:

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

Чтобы выполнить поиск фактического содержимого транзакций через историю репо, используйте:

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

чтобы показать все экземпляры данного текста, содержащее имя файла и commit sha1.

Наконец, в крайнем случае, если ваша фиксация болтается и вообще не связана с историей, вы можете выполнить поиск самого блока с флагом -g (сокращение от --walk-reflogs:

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

EDIT: если вы, похоже, потеряли свою историю, проверьте reflog как свою защитную сетку. Найдите 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 [email protected]{10}
git checkout -b build_0051 # make a new branch with the build_0051 as the tip

Ответ 2

Я помещаю это в свой файл ~/.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

Ответ 3

Хотя и немного запоздало, есть :/ который является выделенной нотацией для указания фиксации (или ревизии) на основе сообщения фиксации, просто префикс строки поиска с :/, например:

git show :/message

Здесь <message> может быть сложным шаблоном регулярных выражений, состоящим из пробелов, поэтому, пожалуйста, не забудьте процитировать/экранировать при необходимости, например:

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

В качестве альтернативы можно указать начальную точку, чтобы найти ближайший коммит, достижимый из определенной точки, например:

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

Смотрите: руководство по git-ревизиям.

Ответ 4

git log --grep=<pattern>
            Limit the commits output to ones with log message that matches the
            specified pattern (regular expression).

Ответ 5

git log --grep="Build 0051"

должен сделать трюк

Ответ 6

Попробуйте это!

git log | grep -b3 "Build 0051"

Ответ 7

сначала используйте git log --oneline чтобы найти SHA коммита (Message), затем я использовал git log --stat 8zad24d с SHA (пример первых пар sha char (8zad24d)), чтобы найти нужную информацию