Не существует фиксированной информации, которая бы записывала такие данные, потому что SHA1 не всегда ассоциированы с путем ссылки.
Ветви могут перемещаться, переименовываться или удаляться, в то время как SHA1 все еще будет сохраняться (кроме случаев, когда на него не ссылается ни один шаблон ссылки, он в конечном итоге будет сокращен)
Как говорится:
git show-ref |grep yourSHA1|awk "{print $2}"
git show-ref --heads --tags -d |grep yourSHA1|awk "{print $2}"
очень близко подходит к тому, что ты хочешь:
C:\Prog\Git\tests\rep\main5>git show-ref | grep f4a071 | awk "{print $2}"
refs/heads/master
refs/remotes/origin/HEAD
refs/remotes/origin/master
Для git show-ref
доступно множество опций, которые позволят вам:
- дисплей также разыменовывается SHA1
- отображать SHA1 только для шаблона ссылок
ОП добавляет:
он вообще ничего не вернет, если переданный SHA не ссылается на заголовок или какой-либо другой разыменованный коммит?
У вас есть идея, как мы могли бы сделать промежуточный шаг, чтобы определить SHA самого последнего коммита, принадлежащего той же ветви, что и пройденный SHA?
Еще одна сантехническая команда, которая может помочь, будет git name-rev
:
C:\Prog\Git\tests\rep\main5>git name-rev a7768453
a7768453 patches~1
C:\Prog\Git\tests\rep\main5>git name-rev a7768453|gawk "{gsub(/~.*/,\"\",$2);print $2}
patches
Как Джефроми упоминает в комментариях, фарфоровая команда будет git branch --contain
:
C:\Prog\Git\tests\rep\main5>git branch --contain 1e73e369
master
* patches
tmp
--contains <commit>
Только списки ветвей, которые содержат указанный коммит.
Он используется для поиска всех ветвей, которые будут нуждаться в особом внимании, если <commit>
должны были быть перебазированы или изменены, так как эти ветки содержат указанный <commit>
.