При выполнении a git tag
, Я не всегда силен в запоминании, если HEAD~6 (например), является содержащим или эксклюзивным.
Учитывая, что большинство моих фиксаций снабжается префиксом номер выпуска, я задался вопросом, существует ли некоторая волшебная команда для поиска фиксации SHA от части его сообщения.
Я знаю, что легко сделать a git log
и работа оттуда, но я хочу более легкий :)
РЕДАКТИРОВАНИЕ: Кто-то также задал противоположный вопрос: В Мерзавце, там способ получить “дружественное” название произвольной фиксации?
Вы можете использовать синтаксис : / blah
, чтобы указать фиксацию, сообщение фиксации которой начинается с данного текста.
Например.
git show ":/Issue #299"
Это действительно везде, где можно использовать фиксацию. Например.
git cherry-pick ":/Issue #299"
Если вам действительно нужен SHA-1 коммита, вы можете просто использовать rev-parse.
git rev-parse ":/Issue #299"
См. Раздел «УКАЗАНИЕ ИЗМЕНЕНИЙ» на странице руководства git rev-parse :
Двоеточие, за которым следует косая черта, за которым следует текст :
Это имя фиксации, сообщение о фиксации которой начинается с указанного текста.
Это имя возвращает самую молодую совпадающую фиксацию, доступную по любой ссылке.
Если сообщение фиксации начинается с!
, вы должны это повторить; специальная последовательность: /!
, за которым следует что-то еще, кроме!
пока зарезервирован.
Try
git rev-list --grep='message excerpt' HEAD
Это список только тех коммитов, которые являются предками HEAD
. Если вы хотите найти все коммиты в репозитории (включая те, которые не являются предками HEAD
), я не знаю, как это сделать, кроме как вручную просмотреть все главы веток вручную и запустить это команда. (Возможно, есть способ, просто не знаю, что это может быть)
git log --grep=word
должны помочь найти соответствующий коммит.
(в отличие от поиска commit contents , где более уместны git log -S
(опция кирки) или git grep
)
Добавить различные параметры формата, такие как
git log --grep=word --pretty=oneline
git log --grep=word --pretty=format:"%h"
(последний отображает только SHA1), и все готово.
См. Также « Удовольствие с git log --grep
»
git log --grep=frotz --grep=nitfol --since=1.month
Это обнаруживает коммиты, которые произошли в течение последнего месяца и упоминают frotz или nitfol в их сообщениях журнала коммитов.
Как и в случае с обычным «git grep», указание нескольких шаблонов означает «то или иное».
В статье указывается, что git grep
ориентирован на строку, и в этой команде git log --grep
используется параметр --all-match.
То, как семейство "
git log
" использует механизм grep как раз для того, "есть ли совпадение во всем этом?" аспект, а не аспект «покажи мне строки, соответствующие этим критериям». Он позволяет вам использовать этот механизм следующим образом:
git log --all-match --grep=frotz --author=Linus
Это покажет коммиты, в которых упоминается frotz и написанные Линусом.