У меня есть ветка-сирота (назовем ее выходной), которая содержит документы, сгенерированные шаблонами, хранящимися в моей основной ветке. Я хотел бы проверить коммит на выходе, который соответствует конкретному коммиту на main.
Я решил использовать git commit --trailer 'Source: xxxxx'
при фиксации на выходе, где xxxxx
— это соответствующая фиксация на main.
Можно ли проверить коммит на выходе, зная только значение его трейлера?
Чтобы найти значение sha1 коммита с трейлером Source: xxxxx
,
git log --pretty=%H --grep='Source: xxxxx'
Чтобы проверить фиксацию за один шаг,
git checkout $(git log --pretty=%H --grep='Source: xxxxx')
git show ':/Source: xxxxx'
Смотрите документы на :/ в git help revisions
.
Если я правильно понимаю, это всегда будет возвращать только один коммит, верно?
@ITChap Да. В документах четко сказано: «Это имя возвращает самую молодую совпадающую фиксацию…»
Чтобы обязательно сопоставить фиксацию с трейлером (а не только с сообщением о коммите, тема которого включает Source: xxxxx
), вы можете использовать формат «%(trailers[:options])».
И используйте git switch
(не оформить заказ) или git show
, чтобы просто просмотреть содержимое (без изменения текущего рабочего дерева)
git switch \
$(git log --pretty=format:"%H% (trailers:key=Source,valueonly)"|grep Junio|head -1|cut -d " " -f1)
Кажется, это дает больше гарантий, чем ответ @phd. Просто чтобы подтвердить, что произойдет, если случайно git log вернет более одного коммита?
@ITChap Часть head -1
выберет первую (которая будет самой последней)
«сиротская ветвь» — не очень четко определенный термин в Git; Я предполагаю здесь (как, я думаю, и доктор философии в своем ответе), что вы имеете в виду «ветвь без общей истории». (ElpieKay не совершала такого же скачка.)