Вопрос по git – мерзавец можно посмотреть рефлог удаленного?

45

Можно ли просмотреть рефлог удаленного? То есть я хочу знать, что на выходеgit reflog находится на другом удаленном компьютере.

Обратите внимание, я не прошу рефлога веток удаленного отслеживания (таких как origin / master), я спрашиваю чтоreflog говоритon the other machine.

Если у вас есть доступ к файловой системе удаленной системы (которая часто представляет собой пустое хранилище), у вас всегда есть возможность запустить там git reflog. Но иметь такой доступ обычно невозможно. У меня есть привычка делать это возможным на git-серверах (используя общий доступ к файлам только для чтения), просто для того, чтобы можно было просматривать reflog на стороне сервера. Anders Zommarin

Ваш Ответ

3   ответа
30

потому что reflog - это журнал локально сделанных переназначений некоторого ref-имени. По сути, каждый раз, когда вы бежитеgit update-ref -m msg <name> <target> обновление регистрируется ... локально:.git/logs/<name> добавляет строку:

$ git update-ref -m foo HEAD HEAD^
$ tail -1 .git/logs/HEAD
2418b6ba8fd0289933c9351260a272b8e410867f 8d945134b0cead535d66af29c8eb4228b5dc3763 [redacted] <[redacted]> 1334106483 -0600     foo

(вещь перед сообщением, в данном случаеfoo, это не пробелы, а табуляция; Я расширил его для ТАКИХ целей). Концептуально, все остальное, что перемещает наконечник ветви, вызываетgit update-ref чтобы сделать это (некоторые являются сценариями оболочки и буквально делают это, другие просто вызывают код C, который выполняет все обновления файла) ... и все в.git/logs составляет рефлог.

Если бы в базовых протоколах git: // и / или ssh: // были вещи, которые позволили бы вам получить reflog, он бы это сделал, но, насколько я знаю, это не так.

26

First use Github’s Events API to retrieve the commit SHA.
curl https://api.github.com/repos/<user>/<repo>/events

Identify the SHA of the orphan commit-id that no longer exists in any branch.

Next, use Github’s Refs API to create a new branch pointing to the orphan commit.

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref":"refs/heads/D-commit", "sha":"<orphan-commit-id>"}' https://api.github.com/repos/<user>/<repo>/git/refs

Replace <orphan-commit-id> in the above command with the SHA identified in step 2.

Finally git fetch the newly created branch into your local repository.
From there you can cherry-pick or merge the commit(s) back into your work.

Проверять, выписыватьсяthis article для реального примера.

Here инструкции по аутентификации.
Если вы получите"message": "Not Found" ошибка, это означает, что вам необходимо подтвердить подлинность, например, передав строку запроса access_token.
Большое спасибо! Для тех, кто менее склонен использовать командную строку, вы также можете пропустить шаг 3, просто открывgithub.com/<user>/<repo>/commits/…& GT; и создайте новую ветвь из нее непосредственно в & quot; дереве: & quot; падать. Тогда просто принеси это нормально.
Для меня самый простой способ отследитьSHA of the orphan commit-id было посмотреть на последнюю сборку на CircleCI (или [вставить службу CI здесь]).
2

git push --force на мастере, прежде чем получить объединенные изменения, и тем временем объединенная ветвь была удалена (да, это случилось со мной), вы можете найти объединенный запрос на извлечение и перейти кCommits раздел, например:

enter image description here

Затем вы идете на последнем коммите и нажмите на<> кнопка (которая имеет заголовок & quot; Просмотреть хранилище на данный момент в истории & quot;).

Это приведет вас к & quot; удаленному & quot; точка истории. Отсюда вы можете:

create a new branch and then open a new pull request (recommended if the change comes from another repository). open a new pull request (recommended for commits inside your repository).

Похожие вопросы