Как найти хеш ветки в Git?
Учитывая локальное / удаленное имя ветки, как я могу получить хеш коммита, на который указывает эта ветка?
4 ответа
Команда git rev-parse
твой друг, например:
$ git rev-parse development
17f2303133734f4b9a9aacfe52209e04ec11aff4
... или для ветки удаленного отслеживания:
$ git rev-parse origin/master
da1ec1472c108f52d4256049fe1f674af69e785d
Эта команда, как правило, очень полезна, так как она может анализировать любые способы указания имен ветвей в git
, такие как:
git rev-parse master~3
git rev-parse HEAD@{2.days.ago}
... так далее.
Не забывайте, что, начиная с Git 2.19 (второй квартал 2018 г.), Git готовит переход с хэшей SH1 на SHA2: см. " Почему Git не использует более современный SHA?"
С Git 2.25 (первый квартал 2020 г.), git rev-parse
развивается и отражает этот возможный новый хэш.
См совершать fa26d5e, совершать cf02be8, совершают 38ee26b, совершают 37ab8eb, совершают 0370b35, совершают 0253e12, совершают 45e2ef2, совершают 79b0edc, совершают 840624f, совершают 32a6707, совершают 440bf91, совершают 0b408ca, совершают 2eabd38 (28 окт 2019), а также совершать 1bcef51, совершают ecde49b (5 октября 2019 г.) Брайан М. Карлсон (bk2204
).
(Слияние Junio C Hamano -gitster
- в коммите 28014c1, 10 ноя 2019)
rev-parse
: добавить--show-object-format
вариантПодписано: brian m. Карлсон
Добавьте возможность печати формата объекта, используемого для ввода, вывода или хранения.
Это позволяет сценариям оболочки обнаруживать используемый алгоритм хеширования.
Поскольку план перехода допускает использование нескольких алгоритмов ввода, укажите, что мы можем предоставить несколько результатов для ввода, и формат, который они могут принимать.
Хотя мы не поддерживаем это сейчас, раннее документирование означает, что авторы сценариев могут подготовить свои сценарии к будущему, когда мы это сделаем.
В git rev-parse
документация теперь включает:
--show-object-format[=(storage|input|output)]:
Показать формат объекта (алгоритм хеширования), используемый для репозитория для хранения внутри
.git
каталог, ввод или вывод. Для ввода можно напечатать несколько алгоритмов, разделенных пробелами. Если не указано, по умолчанию используется "хранилище".
С Git 2.29 (Q4 2020) вы можете убедиться, какой формат вы должны использовать для чтения хеш-фиксации ветки (или любого другого объекта).
См совершать e023ff0, совершать 4feb562, совершает 8a06d56, совершает c49fe07, совершает 02a32db, совершают ceaa4b3, совершает eff45da, совершает b5b46d7, совершает c5aecfc, совершает e74b606, совершает 439d3a1, совершает 6c2adf8, совершает de5737c, совершает e0a646e, совершает 6ff6a67, совершает 831279d, совершить b6e5005, совершить 287bb3a, зафиксировать 22f1824, зафиксировать db00af9, совершают 7187eb1, совершают 98de0b2, совершает a5587b8, совершает 66b6d43, совершает 2197f87, совершает c0b65ea, совершает d62607d, совершает d482c23, совершают 866be6e, совершают 4bacb6d, совершает 252a4ee, совершает 368f3cb, совершает abe3db1, совершает 08fbc5d, совершает 11b6961, совершает 9e3bd8a, совершает d827bce, совершить 094a685 (29 июля 2020 г.) Брайан М. Карлсон (bk2204
).
См. Commit 800e6a7 (29 июля 2020 г.) Йоханнес Шинделин (dscho
).
(Слияние Junio C Hamano -gitster
- в коммите e0ad957, 11 августа 2020 г.)
docs
: добавить документацию дляextensions.objectFormat
Подписано: brian m. carlson Обзор
: Эрик Саншайн
Документируйте
extensions.objectFormat
настройка конфигурации.
Предупредите пользователей, чтобы они не изменяли его самостоятельно.
git config
теперь включает в свою справочную страницу:
extensions.objectFormat
Укажите используемый алгоритм хеширования.
Допустимые значения:
sha1
и>sha256
.
Если не указано,sha1
предполагается.
Указание этого ключа является ошибкой, если толькоcore.repositoryFormatVersion
равно 1.Обратите внимание, что этот параметр должен быть установлен только
git init
илиgit clone
.
Попытка изменить его после инициализации не сработает и вызовет проблемы, которые трудно диагностировать.
Чтобы было ясно, в Git 2.29 (Q4 2020) недавнее добавление поддержки SHA-256 отмечено в документации как экспериментальное.
См. Commit ff233d8 (16 августа 2020 г.) Мартина Агрена (none
).
(Слияние Junio C Hamano -gitster
- в коммите d1ff741, 24 августа 2020 г.)
Documentation
: отметка--object-format=sha256
как экспериментальныйПодписано: Мартин Агрен
После eff45daab8 ("
repository
: включить поддержку SHA-256 по умолчанию ", 2020-07-29, Git v2.29.0 - слияние указано в пакете №6), стандартные сборки Git позволяют пользователю запускать, например,git init --object-format=sha256
и взломать.
Это может быть хорошим способом получить опыт работы с миром SHA-256, например, чтобы найти ошибки, которыеGIT_TEST_DEFAULT_HASH=sha256 make test
не замечает.
Но на самом деле это отдельный мир: такие репозитории SHA-256 будут жить полностью отдельно от (к настоящему времени довольно большого) набора репозиториев SHA-1.
Взаимодействие через границу в принципе возможно, например, через "diff
+apply
" (или "format-patch
+am
"), но даже у этого есть свои ограничения: применение разницы SHA-256 в репозитории SHA-1 работает в простом случае, но если вам нужно прибегнуть к-3
, не повезло тебе.По аналогии, "
push
+pull
"должно работать, но на самом деле вы будете работать в основном за пределами остального мира. Это может быть нормально к моменту инициализации вашего репозитория, и может быть нормально в течение нескольких месяцев после этого, но может наступить день, когда вы начинаем сожалеть об использовании[
git init --object-format=sha256](https://github.com/git/git/blob/ff233d8dda12657a90d378f2b403bc6c85838c59/Documentation/git-init.txt#L52)<sup>([man](https://git-scm.com/docs/git-init#Documentation/git-init.txt---object-formatltformatgt))</sup>
и закопались в довольно глубокую яму.В настоящее время разрабатываются темы для документирования наших форматов данных и протоколов, касающихся SHA-256, и в некоторых случаях (midx и commit-graph) мы рассматриваем возможность корректировки того, как форматы файлов указывают, какой формат объекта использовать.
Где бы
--object-format
упоминается в нашей документации, давайте проясним, что его использование с sha256 является экспериментальным.
Если позже нам понадобится объяснить, почему мы не можем обрабатывать данные, которые мы создали еще в 2020 году, мы всегда можем указать на этот абзац, который мы добавляем здесь.Используя "include::"- небольшую аннотацию, мы должны быть единообразными во всей документации и в конечном итоге сможем постепенно снизить серьезность этого текста.
Однажды мы можем даже использовать его, чтобы начать поэтапный отказ--object-format=sha1
, но не будем забегать вперед...Есть также
extensions.objectFormat
, но упоминается только три раза. Дважды, когда мы добавляем этот новый отказ от ответственности, и в третьем месте у нас уже есть предупреждение "не редактировать". Оттуда заинтересованные читатели должны в конечном итоге найти этот новый, который мы добавляем здесь.Потому как
GIT_DEFAULT_HASH
предоставляет еще одну точку входа в эту функцию, также задокументируйте ее экспериментальный характер.
git
теперь включает в свою справочную страницу:
вместо этого используется. По умолчанию - "sha1". ЭТА ПЕРЕМЕННАЯ ЭКСПЕРИМЕНТАЛЬНАЯ! Видеть
--object-format
вgit init
.
object-format-disclaimer
теперь включает в свою справочную страницу:
ЭТО ВАРИАНТ ЭКСПЕРИМЕНТАЛЬНЫЙ!
Поддержка SHA-256 является экспериментальной и все еще находится на начальной стадии.Репозиторий SHA-256, как правило, не может> совместно использовать> работу с "обычными" репозиториями SHA-1.
Следует предположить, что, например, внутренние форматы файлов Git по отношению к репозиториям SHA-256 могут изменяться обратно несовместимыми способами.
Только использовать--object-format=sha256
для тестирования.
Хеши хранятся под .git/refs/
например, .git/refs/heads/master
Но программно использовать git rev-parse
как предложил Марк Лонгэйр, так как это безопаснее.
Краткий ответ для получения хэша текущей проверенной ветки может быть
git rev-parse `git branch | cut -d' ' -f2`
Объяснение:
Предполагая, что вы проверили разработку, вы получаете
> ветка git
* develop
> ветка git | cut -d' ' -f2
develop
> git rev-parse `ветвь git | cut -d' ' -f2`
[ваш хэш-код]
наслаждаться :)