Отримати конкретний комміт з віддаленого Git-репозиторію

Чи є спосіб отримати тільки один конкретний комміт з віддаленого Git-репозиторію, не клонуючи його на моєму комп'ютері? Структура віддаленого репозиторію абсолютно така ж, як і у мене, а отже, конфліктів не буде, але я не знаю, як це зробити, і не хочу клонувати цей величезний репозиторій.

Я новачок в git'і, чи є якийсь спосіб?

Ви можете клонувати тільки один раз, тому якщо у вас вже є клон віддаленого сховища, витягування з нього не призведе до повторного завантаження всього наново. Просто вкажіть, яку гілку ви хочете витягнути, або витягніть зміни і перевірте потрібний вам комміт.

Отримання з нового сховища є дуже дешевим за пропускною здатністю, оскільки воно завантажить лише ті зміни, яких у вас немає. Подумайте про те, щоб Git робив правильні речі з мінімальним навантаженням.

Git зберігає все в теці .git. Комміт не може бути отриманий і збережений ізольовано, йому потрібні всі його предки. Вони взаємопов'язані.


Однак, щоб зменшити розмір завантаження, ви можете попросити git витягувати лише об'єкти, пов'язані з певною гілкою або комітом:

git fetch origin refs/heads/branch:refs/remotes/origin/branch

Це дозволить завантажити лише ті комміти, що містяться у віддаленій гілці branch (і лише ті, які ви пропустили), і зберегти їх у origin/branch. Після цього ви можете об'єднати або виписати.

Ви також можете вказати тільки SHA1-комміти:

git fetch origin 96de5297df870:refs/remotes/origin/foo-commit

Це завантажить тільки комміт вказаного SHA-1 96de5297df870 (і його предків, які ви пропустили), і збереже його як (неіснуючу) віддалену гілку origin/foo-commit.

Коментарі (9)

Я витягнув свій git repo:

git pull --rebase  

Дозволивши git'у витягнути весь код для гілки, а потім я пішов робити скидання до комміту, який мене цікавив.

git reset --hard.

Сподіваюся, це допоможе.

Коментарі (3)

Ви можете просто отримати один комміт віддаленого репо за допомогою

git fetch  

де,

  • `може бути ім'ям віддаленого репозиторію (наприклад,origin) або навіть URL-адресою віддаленого репозиторію (наприклад,https://git.foo.com/myrepo.git`)
  • `` може бути SHA1 коммітом

наприклад

git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545

після того, як ви отримали комміт (і відсутніх предків), ви можете просто перевірити його за допомогою

git checkout FETCH_HEAD

Зауважте, що це приведе вас у стан "відокремленої голови".

Коментарі (9)