Buscar..
Introducción
A diferencia de empujar con Git donde los cambios locales se envían al servidor del repositorio central, tirar con Git toma el código actual en el servidor y lo "arrastra" desde el servidor del repositorio a su máquina local. Este tema explica el proceso de extracción de código de un repositorio con Git, así como las situaciones que se pueden encontrar al extraer un código diferente en la copia local.
Sintaxis
- git pull [opciones [<repository> [<refspec> ...]]
Parámetros
Parámetros | Detalles |
---|---|
--quiet | No hay salida de texto |
-q | taquigrafía de --quiet |
--verbose | salida de texto detallado. Pasado a buscar y fusionar / rebase los comandos respectivamente. |
-v | taquigrafía para --verbose |
--[no-]recurse-submodules[=yes | on-demand | no] | ¿Recuperar nuevas confirmaciones para submódulos? (No es que esto no sea un pull / checkout) |
Observaciones
git pull
ejecuta git fetch
con los parámetros dados y llama a git merge
para combinar las cabezas de rama recuperadas en la rama actual.
Actualización con cambios locales.
Cuando hay cambios locales presentes, el comando git pull
cancela los informes:
error: sus cambios locales en los siguientes archivos se sobrescribirían mediante la combinación
Para actualizar (como svn update hizo con subversion), puede ejecutar:
git stash
git pull --rebase
git stash pop
Una forma conveniente podría ser definir un alias usando:
git config --global alias.up '!git stash && git pull --rebase && git stash pop'
git config --global alias.up 'pull --rebase --autostash'
A continuación, simplemente puede utilizar:
git up
Extraiga el código del control remoto
git pull
Tirar, sobrescribir local
git fetch
git reset --hard origin/master
Cuidado: mientras que las confirmaciones se descartan usando reset --hard
se pueden recuperar usando el reflog
reset
y reset
, los cambios no confirmados se eliminan para siempre.
Cambie el origin
y el master
al control remoto y la rama a la que desea tirar a la fuerza, respectivamente, si tienen un nombre diferente.
Manteniendo la historia lineal al tirar.
Rebasando al tirar
Si está obteniendo nuevas confirmaciones del repositorio remoto y tiene cambios locales en la rama actual, entonces git fusionará automáticamente la versión remota y su versión. Si desea reducir el número de fusiones en su sucursal, puede decirle a git que vuelva a escribir sus confirmaciones en la versión remota de la sucursal.
git pull --rebase
Haciéndolo el comportamiento por defecto
Para hacer que este sea el comportamiento predeterminado para las sucursales recién creadas, escriba el siguiente comando:
git config branch.autosetuprebase always
Para cambiar el comportamiento de una rama existente, usa esto:
git config branch.BRANCH_NAME.rebase true
Y
git pull --no-rebase
Para realizar un tirón de fusión normal.
Compruebe si se puede avanzar rápidamente
Para permitir solo el reenvío rápido de la sucursal local, puede utilizar:
git pull --ff-only
Esto mostrará un error cuando la sucursal local no sea de reenvío rápido y deba ser rebasada o fusionada con el flujo ascendente.
Pull, "permiso denegado"
Algunos problemas pueden ocurrir si la carpeta .git
tiene un permiso incorrecto. Solucionar este problema configurando el propietario de la carpeta .git
completa. A veces sucede que otro usuario extrae y cambia los derechos de la carpeta o los archivos .git
.
Para solucionar el problema:
chown -R youruser:yourgroup .git/
Tirando de los cambios a un repositorio local
Tirón simple
Cuando esté trabajando en un repositorio remoto (por ejemplo, GitHub) con otra persona, en algún momento querrá compartir sus cambios con ellos. Una vez que hayan enviado sus cambios a un repositorio remoto, puede recuperar esos cambios extrayendo de este repositorio.
git pull
Lo hará, en la mayoría de los casos.
Tire de un control remoto o rama diferente
Puede extraer cambios desde un remoto o rama diferente especificando sus nombres
git pull origin feature-A
Extraerá el origin
formulario de la feature-A
la rama en su sucursal local. Tenga en cuenta que puede proporcionar directamente una URL en lugar de un nombre remoto, y un nombre de objeto como un SHA de confirmación en lugar de un nombre de rama.
Tirón manual
Para imitar el comportamiento de un git pull, puedes usar git fetch
y git merge
git fetch origin # retrieve objects and update refs from origin
git merge origin/feature-A # actually perform the merge
Esto le puede dar más control y le permite inspeccionar la sucursal remota antes de fusionarla. De hecho, después de la captura, puedes ver las ramas remotas con git branch -a
, y verificarlas con
git checkout -b local-branch-name origin/feature-A # checkout the remote branch
# inspect the branch, make commits, squash, ammend or whatever
git checkout merging-branches # moving to the destination branch
git merge local-branch-name # performing the merge
Esto puede ser muy útil al procesar solicitudes de extracción.