Как получить последний хеш коммита с удаленного компьютера? - PullRequest
1 голос
/ 16 апреля 2019

Я хочу получить последний хеш коммита в удаленном хранилище, независимо от ветви.

Я пробовал git ls-remote <remote> и git ls-remote --tags <remote>, но оба они, по-видимому, отсортированы по имени тега, что не позволяет выяснить, какой из них является последним.

Например, на Github вы можете перейти в Insights / Network и получить график, который включает в себя все ветви и коммиты в них - однако работа в этом графическом интерфейсе, очевидно, не идеальна - но данные должны как-то быть там.

Есть ли способ получить последний хеш коммита с удаленного сервера, независимо от ветви?

Ответы [ 3 ]

2 голосов
/ 16 апреля 2019

Последние версии git (не знаю, что - 2.14 нет, 2.21 - нет) позволяют использовать опцию --sort в ls-remote.Вы можете легко сделать:

git ls-remote --sort=committerdate

Но имейте в виду - если необходимо выполнить сортировку объектов (как в приведенном выше примере), объекты должны быть доступны локально.В противном случае вы получите сообщение об ошибке «fatal: отсутствующий объект».Поэтому убедитесь, что вы всегда делаете git fetch, прежде чем использовать его.

Если честно - поскольку вы должны убедиться, что все удаленные ветки извлечены локально, прежде чем вы сможете его использовать, это не намного лучше, чемпросто делаю git branch -r --sort=committerdate после выборки.Единственное очевидное отличие состоит в том, что ls-remote напрямую показывает хеш коммита, который вы ищете, в то время как с git branch вам нужно будет обернуться в git rev-parse следующим образом:

git rev-parse `git branch -r --sort=committerdate | tail -1`
2 голосов
/ 16 апреля 2019

Вы можете использовать git show с пультами:

git show origin/master

Покажет вам последний коммит origin/master

РЕДАКТИРОВАТЬ: чтобы получить "абсолютный" последний коммит, ясделать что-то вроде:

git log -n 1 $(git branch -r)

, который будет регистрировать все удаленные ветви (git branch -r).Но сохранит только первый коммит (-n 1).

Я не слишком уверен в хронологическом порядке, но в моем репо, кажется, дает мне последний.

Другой вариантболее "oneliner-like" будет:

git show -s --pretty='format:%ci %s %h' $(git branch -r) | sort -r | head -n 1

, который будет перечислять последние коммиты каждой удаленной ветви, отформатированные таким образом, что дата сначала, затем отсортирована (по дате) и сохранится первая

1 голос
/ 16 апреля 2019

Выборка с пульта, "источник", например,

git fetch origin

Вывести информацию обо всех удаленных филиалах в «refs / remotes / origin»,

git for-each-ref refs/remotes/origin

Сортировка по дате коммиттера в порядке убывания,

git for-each-ref refs/remotes/origin --sort="-committerdate"

Получить последнюю версию,

git for-each-ref refs/remotes/origin --sort="-committerdate" | head -1

Если вы тоже учитываете теги, приведенный выше результат может быть не последним коммитом. Чтобы узнать последний коммит, на который указывают теги,

git for-each-ref refs/tags --sort="-*committerdate" | head -1

Обратите внимание, что тег может быть аннотирован, поэтому здесь * необходим.

Возможно, вас также заинтересуют ссылки в других пространствах имен, например, отказанные запросы на извлечение. Сравните последние коммиты каждой группы рефери и получите самый последний из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...