Git Можно ли просмотреть рефлон удаленного?
Можно ли просмотреть лог удаленного пульта? То есть, я хочу знать, что вывод git reflog
находится на другом удаленном компьютере.
Обратите внимание, что я не запрашиваю reflog ветвей удаленного отслеживания (например, origin/master), я спрашиваю, что говорит reflog
на другом компьютере.
Ответы
Ответ 1
Ответ в основном "нет" (за исключением этой машины), потому что 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
, - это не пробелы, а вкладка, я расширил ее для целей SO). Концептуально все, что перемещает кончик ветки, вызывает git update-ref
, чтобы сделать это (некоторые из них являются сценариями оболочки и в буквальном смысле это делают, другие просто вызывают код C, который выполняет все обновления файла)... и все в .git/logs
делает up reflog.
Если в базовых протоколах git://и/или ssh://есть вещи, которые позволяют вам попасть в reflog, это будет делать это, но, насколько я знаю, это не так.
Ответ 2
В случае, если удаленный компьютер является хранилищем github,
-
Сначала используйте API событий Githubs для извлечения фиксации SHA.
curl https://api.github.com/repos/<user>/<repo>/events
-
Определите SHA сиротского кода фиксации, который больше не существует в какой-либо ветки.
-
Далее, используйте Githubs Refs API, чтобы создать новую ветвь, указывающую на сиротскую фиксацию.
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
Замените <orphan-commit-id>
в приведенной выше команде с помощью SHA, идентифицированного на шаге 2.
-
Наконец git fetch
вновь созданная ветка в ваш локальный репозиторий.
Оттуда вы можете черри-выбрать или объединить фиксацию обратно в вашу работу.
Посмотрите эту статью для фактического примера.
Ответ 3
В GitHub, если вы сделали по ошибке a git push --force
на master перед тем, чтобы извлечь объединенные изменения, и в то же время объединенная ветка была удалена (да, это случилось со мной), вы можете искать запрос объединенного тяги и перейдите в раздел Commits, например:
![введите описание изображения здесь]()
Затем вы переходите к последнему фиксации и нажимаете кнопку <>
(у которой есть заголовок "Просмотреть репозиторий в этой точке истории" ).
Это приведет вас к "удаленной" точке истории. Отсюда вы можете:
- создайте новую ветку и затем откройте новый запрос на перенос (рекомендуется, если изменение происходит из другого репозитория).
- откройте новый запрос на перенос (рекомендуется для фиксации внутри вашего репозитория).