Проверьте, содержит ли ветка git коммит с заданной темой

Учитывая точную строку темы фиксации, я хочу знать, содержит ли ветка фиксацию с этой темой.

Что у меня сейчас есть: git log --format = "%s" -F --grep = "$msg" "$branch" | grep -Fq --max-count=1 -- "$msg"

т.е. выполните поиск в журнале с помощью grep с фиксированной строкой и распечатайте тему. Затем найдите этот объект с той же фиксированной строкой и остановитесь на первом совпадении.

2-й grep требуется, потому что git log --grep может найти шаблон в любом месте сообщения фиксации (например, Fixes "$msg")

Однако у этого есть обратная сторона: кажется, что он всегда проходит всю историю этой ветки, что занимает довольно много времени.

В качестве теста я запустил git log --format = "%s" -F --grep = "$msg" "$branch" | grep -Fq --max-count=1 -- "$msg" и git log --format = "%s" -F --grep = "$msg" "$branch", и они оба заняли одинаковое время, хотя фиксация для grep для была найдена / напечатана очень быстро (для 2-го)

Итак, есть ли способ напрямую найти фиксацию в ветке по заданному субъекту (используя фиксированные строки, поскольку $msg исходит из другой команды и может содержать символы, подобные регулярным выражениям) быстрее или, по крайней мере, ускорить выход моего log-grep-pipe (на успех)?

🤔 А знаете ли вы, что...
Bash позволяет использовать условные операторы, циклы и функции в скриптах.


2
50
1

Ответ:

Решено

Попробуй это:

git log --format = "%s" "$branch" | grep -Fqx --max-count=1 -- "$msg"

Здесь x будет соответствовать всей строке, а max-count вернет первое совпадение.