¿Hay alguna manera de recuperar sólo un commit específico de un repositorio Git remoto sin clonarlo en mi PC? La estructura del repositorio remoto es absolutamente igual a la mía y por lo tanto no habrá ningún conflicto, pero no tengo idea de cómo hacer esto y no quiero clonar ese enorme repositorio.
Soy nuevo en git, ¿hay alguna manera?
Sólo se clona una vez, así que si ya tiene un clon del repositorio remoto, tirar de él no descargará todo de nuevo. Sólo tiene que indicar qué rama quiere extraer, o recuperar los cambios y comprobar la confirmación que desea.
Sacar de un nuevo repositorio es muy barato en ancho de banda, ya que sólo descargará los cambios que no tienes. Piensa en términos de Git haciendo lo correcto, con una carga mínima.
Git almacena todo en la carpeta .git
. Un commit no puede ser obtenido y almacenado de forma aislada, necesita a todos sus antecesores. Están interrelacionados.
Sin embargo, para reducir el tamaño de la descarga, puedes pedirle a git que recupere sólo los objetos relacionados con una rama o confirmación específica:
git fetch origin refs/heads/branch:refs/remotes/origin/branch
Esto descargará sólo los commits contenidos en la rama remota branch
(y sólo los que te falten), y los almacenará en origin/branch
. A continuación, puede fusionar o checkout.
También puede especificar sólo un commit SHA1:
git fetch origin 96de5297df870:refs/remotes/origin/foo-commit
Esto descargará sólo el commit del SHA-1 96de5297df870 especificado (y sus ancestros que se pierdan), y lo almacenará como rama remota (no existente) origin/foo-commit
.
Hice un pull en mi repo de git:
git pull --rebase <repo> <branch>
Permitiendo a git tirar de todo el código de la rama y luego fui a hacer un reset sobre el commit que me interesaba.
git reset --hard <commit-hash>
Espero que esto ayude.
Puede obtener simplemente una única confirmación de un repositorio remoto con
git fetch <repo> <commit>
donde,
<repo>
puede ser un nombre de repo remoto (por ejemplo origin
) o incluso una URL de repo remoto (por ejemplo https://git.foo.com/myrepo.git
)<commit>
puede ser el commit SHA1por ejemplo
git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545
después de obtener la confirmación (y los ancestros que faltan) puede simplemente comprobarlo con
git checkout FETCH_HEAD
Tenga en cuenta que esto le llevará en el "detached head" estado.