HEAD
можно анализировать как коммит, если есть текущий коммит и почти всегда текущий коммит.«Неподтвержденные изменения» не имеет отношения к тому, существует ли текущая фиксация.
Чтобы сравнить индекс и рабочее дерево с текущей фиксации, используйте git status
.Чтобы сделать это надежно, в вашем собственном программном обеспечении рассмотрите возможность использования git --no-optional-locks status --porcelain=v2
, возможно, также с -z
, и чтения его выходных данных, что показано в документации git status
.Затем ваш код может выбрать, что считать «незафиксированными изменениями» (включая неотслеживаемые файлы и, если вы добавите --ignored
, игнорируемые файлы).
В этом конкретном случае вы можете просто использовать git describe --always --dirty
и проверитьдля суффикса -dirty
.Или - поскольку именно это git describe
делает само по себе - запустите git diff-index --quiet HEAD
и проверьте его состояние выхода: 0 означает «не грязный», 1 означает «грязный», все остальное означает «неспособен сказать, что-то пошло не так».Метод, использующий git status --porcelain...
, является наиболее гибким, поскольку он позволяет you определить, что you означает "грязным", но два других гораздо проще.