Резюме:
- Зафиксирован коммит: test
git rev-parse HEAD &> /dev/null
- Ссылка на коммит существует: test
git rev-list -n 1 --all &> /dev/null
- Объекты существуют в репозитории: тестовый вывод
git fsck
, git count-objects
или проверка содержимого .git/objects
А теперь для обсуждения!
Если вы хотите знать, проверен ли коммит, вы можете использовать git rev-parse HEAD
. Будет вывод, так что вы, вероятно, захотите перенаправить на /dev/null
и просто использовать код выхода. Для всех практических целей это будет достаточно хорошо - делая нормальные вещи, в конечном итоге невозможно в конечном итоге без HEAD
указывать на что-либо. Но это возможно, например, удалив файлы в каталоге .git. В зависимости от вашего сценария это может быть важно - если вы собираетесь уничтожить каталог .git, вы действительно хотите быть параноиком.
Если вы хотите узнать, есть ли вообще какие-либо ссылки с коммитами на них, вы можете использовать git rev-list -n 1 --all
. Опять же, будет вывод (SHA1 первого обнаруженного коммита), поэтому перенаправьте на /dev/null
и проверьте код выхода.
Наконец, если вы хотите проверить, есть ли какие-либо коммиты - даже если они отсутствуют на каких-либо ссылках (вам нужно действительно трудно войти в это состояние), я, вероятно, просто проверю на наличие объектов с git fsck
или git count-objects
- или если это не удалось, перечислите .git/objects
и проверьте что-либо кроме info
и pack
(команды, как правило, не выполняются, если нет файла .git/HEAD
). И да, у вас действительно может быть репо с каплями и деревьями, но без коммитов, но вам придется постараться еще больше, чтобы добраться туда. Это абсолютно безопасные методы, если ваш скрипт страшный.