GitHub находит коммиты, которые не могут быть найдены в git cli - PullRequest
1 голос
/ 02 мая 2020

Меня попросили добавить тег в коммит, которому было около двух месяцев, и на него больше не ссылались. Я не смог найти ссылку на га sh, которая была дана мне через кли. Я не могу найти способ заставить мое локальное рабочее пространство извлекать несвязанные коммиты, чтобы найти «потерянный» коммит.

Я пошел в наш экземпляр GitHub и выполнил поиск по ha sh. GH нашел ссылку на это в некоторых старых запросах. Я просмотрел запрос на получение статуса репо в то время, а затем создал оттуда ветку. Затем я пошел в cli, проверил эту новую ветку, пометил ее и поднял.

Я думаю, что я смогу сделать все это через cli. Я бы предпочел не опираться на GH, когда мне не нужно. Спасибо за помощь.

1 Ответ

3 голосов
/ 02 мая 2020

GitHub обычно не собирает мусор в объектах, найденных в репозиториях (хотя такое поведение не гарантируется). Таким образом, если у вас есть объект, на который нигде нет ссылок, он все еще может существовать на GitHub, но не будет клонирован в вашу систему, поскольку Git будет извлекать только те объекты, на которые есть ссылки.

Это Дело в том, что Git не может знать, что нужно получить объект, на который у него нет ссылки, поэтому он не будет выбирать их, если вы не запросите их специально.

Если объект, который вы поиск является частью запроса извлечения, вы можете попробовать получить ссылку на запрос извлечения. Они называются refs/pull/NUMBER/head, где NUMBER - номер запроса извлечения. Таким образом, чтобы извлечь запрос на извлечение 42 в ветку temp, вы можете выполнить следующее:

git fetch origin refs/pull/42/head:temp

Однако, если требуемый коммит действительно является более старой версией запроса на извлечение, то он, скорее всего, не имеет ссылок , Если это так, вы можете использовать протокол версии 2 с последней версией Git для получения этого коммита. Обратите внимание, что только версия протокола 2 позволяет вам выбирать произвольные коммиты; это иначе ограничено. Поэтому, если вы хотите извлечь af6b65d45ef179ed52087e80cb089f6b2349f4ec в temp, вы можете написать:

git -c protocol.version=2 fetch origin af6b65d45ef179ed52087e80cb089f6b2349f4ec:temp

Не все серверы поддерживают протокол версии 2, но GitHub поддерживает.

Как только вы получите коммит , вы можете пометить и pu sh как обычно.

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