Есть ли способ получить SHA фиксации из своего сообщения?
Когда вы выполняете git tag
, я не всегда прекрасно помню, является ли HEAD ~ 6 (например) инклюзивным или эксклюзивным.
Учитывая, что большинство моих коммитов имеют префикс номера проблемы, я задавался вопросом, есть ли какая-нибудь волшебная команда для поиска SHA-сообщения из части его сообщения.
Я знаю, что легко сделать git log
и работать оттуда, но я хочу более легко:)
EDIT. Кто-то задал другой вопрос: В Git есть ли способ получить "дружественное" имя для произвольной фиксации?
Ответы
Ответ 1
Вы можете использовать синтаксис :/blah
, чтобы указать коммит, чье сообщение фиксации начинается с данного текста.
например.
git show ":/Issue #299"
Это допустимо в любом месте, где может использоваться фиксация. Например.
git cherry-pick ":/Issue #299"
Если вам действительно нужен SHA-1 коммита, вы можете просто использовать rev-parse.
git rev-parse ":/Issue #299"
См. раздел "УКАЗАНИЕ ПЕРЕСМОТРЕНИЙ" страницы git rev-parse man:
Двоеточие, за которым следует косая черта, а затем текст:
Это называет коммит, чье сообщение фиксации начинается с указанного текста.
Это имя возвращает самую младшую совпадающую фиксацию, доступную из любого ref.
Если сообщение фиксации начинается с !
, вы должны повторить это; специальная последовательность :/!
, за которой следует еще что-то, кроме !
.
Ответ 2
git log --grep=word
должен помочь найти соответствующую фиксацию.
(в отличие от поиска содержимого фиксации, где git log -S
(опция pickaxe) или 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
ориентирован по строкам и использует опцию -all-match в этой команде git log --grep
.
Способ "git log
" использует механизм grep именно для этого "все ли совпадение?" а не "показать мне линии, соответствующие этим критериям". Он позволяет использовать этот механизм следующим образом:
git log --all-match --grep=frotz --author=Linus
Это покажет коммиты, которые упоминают frotz и написанные Linus.
Ответ 3
Try
git rev-list --grep='message excerpt' HEAD
Это будет только список коммитов, которые являются предками HEAD
. Если вы хотите выполнить поиск всех коммитов в репозитории (включая те, которые не являются предками HEAD
), я не уверен, как это сделать, кроме как вручную вручную управлять всеми ветвями ветвей и запускать эту команду. (Вероятно, есть способ, я просто не знаю, что это может быть)