Как найти Git-репозиторий по сообщению коммита? - PullRequest
695 голосов
/ 19 августа 2011

Я проверил некоторый исходный код в 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: 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>

Ответы [ 7 ]

1078 голосов
/ 19 августа 2011

Для поиска в журнале фиксации (по всем веткам) по заданному тексту:

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

Для поиска фактического содержания коммитов по истории репо, используйте:

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

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

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

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

РЕДАКТИРОВАТЬ: если вы, кажется, потеряли свою историю, отметьте 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
71 голосов
/ 19 августа 2011

Я положил это в мой ~ / .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
25 голосов
/ 16 августа 2017

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

git show :/message

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

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

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

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

См .: Руководство по редакции git .

20 голосов
/ 19 августа 2011
git log --grep=<pattern>
            Limit the commits output to ones with log message that matches the
            specified pattern (regular expression).
15 голосов
/ 19 августа 2011
git log --grep="Build 0051"

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

8 голосов
/ 19 августа 2011

Попробуйте!

git log | grep -b3 "Build 0051"
3 голосов
/ 09 июня 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...