Как выполнить поиск в репозитории Git с помощью сообщения фиксации?
Я проверил некоторый исходный код в GIT с сообщением фиксации "Build 0051".
Тем не менее, я не могу найти этот исходный код больше - как мне извлечь этот источник из GIT-репозитория, используя командную строку?
Обновить
- Проверено в версиях 0043, 0044, 0045 и 0046 с использованием SmartGIT.
- Проверил 0043, и проверил в версиях до 0051 в другой ветке.
- Снова проверил 0043.
- Теперь 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)), чтобы найти нужную информацию