Чи є спосіб отримати тільки один конкретний комміт з віддаленого 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
.
Я витягнув свій git repo:
git pull --rebase <repo> <branch>
Дозволивши git'у витягнути весь код для гілки, а потім я пішов робити скидання до комміту, який мене цікавив.
git reset --hard <commit-hash>
.
Сподіваюся, це допоможе.
Ви можете просто отримати один комміт віддаленого репо за допомогою
git fetch <repo> <commit>
де,
<repo>
може бути ім'ям віддаленого репозиторію (наприклад, origin
) або навіть URL-адресою віддаленого репозиторію (наприклад, https://git.foo.com/myrepo.git
)<commit>
може бути SHA1 коммітомнаприклад
git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545
після того, як ви отримали комміт (і відсутніх предків), ви можете просто перевірити його за допомогою
git checkout FETCH_HEAD
Зауважте, що це приведе вас у стан "відокремленої голови".