Existe-t-il un moyen de récupérer un seul commit spécifique d'un dépôt Git distant sans le cloner sur mon PC ? La structure du dépôt distant est absolument identique à celle du mien et il n’y aura donc aucun conflit, mais je n’ai aucune idée de la façon de procéder et je ne veux pas cloner cet énorme dépôt.
Je suis novice en matière de git, y a-t-il un moyen ?
Vous ne clonez qu'une fois, donc si vous avez déjà un clone du dépôt distant, le fait de le retirer ne téléchargera pas tout à nouveau. Il suffit d'indiquer la branche que vous voulez extraire, ou de récupérer les changements et de vérifier le commit que vous voulez.
L'extraction à partir d'un nouveau dépôt est très économique en bande passante, car elle ne téléchargera que les modifications que vous n'avez pas. Pensez en termes de Git qui fait la bonne chose, avec une charge minimale.
Git stocke tout dans le dossier `.git'. Un commit ne peut pas être récupéré et stocké isolément, il a besoin de tous ses ancêtres. Ils sont interconnectés.
Pour réduire la taille du téléchargement, vous pouvez cependant demander à git de ne récupérer que les objets liés à une branche ou un commit spécifique :
git fetch origin refs/heads/branch:refs/remotes/origin/branch
Ceci téléchargera seulement les commits contenus dans la branche distante branch
(et seulement ceux qui vous manquent), et les stockera dans origin/branch
. Vous pouvez alors fusionner ou extraire.
Vous pouvez aussi spécifier seulement un commit SHA1 :
git fetch origin 96de5297df870:refs/remotes/origin/foo-commit
Ceci ne téléchargera que le commit SHA-1 spécifié 96de5297df870 (et ses ancêtres qui vous manquent), et le stockera dans la branche distante (inexistante) origin/foo-commit
.
J'ai fait un pull sur mon dépôt git :
git pull --rebase <repo> <branch>
J'ai permis à git de récupérer tout le code de la branche, puis j'ai fait un reset sur le commit qui m'intéressait.
git reset --hard <commit-hash>
J'espère que cela vous aidera.
Vous pouvez simplement récupérer un seul commit d'un repo distant avec
git fetch <repo> <commit>
où,
<repo>
peut être un nom de repo distant (par exemple origin
) ou même une URL de repo distant (par exemple https://git.foo.com/myrepo.git
)<commit>
peut être le commit SHA1par exemple
git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545
après avoir récupéré le commit (et les ancêtres manquants), vous pouvez simplement le checkoutter avec
git checkout FETCH_HEAD
Notez que cela vous amènera à l'état "detached head" ;.