el comandogit fetch
descarga confirmaciones, archivos y referencias de un repositorio remoto en su repositorio local. Ir a buscar es lo que haces cuando quieres ver en lo que todos los demás han estado trabajando. Es similar a svn update
en que te permite ver cómo ha progresado el historial central, pero no te obliga a fusionar los cambios en tu repositorio. Git aísla el contenido obtenido del contenido local existente; no tiene absolutamente ningún efecto en su trabajo de desarrollo local., El contenido obtenido debe ser comprobado explícitamente usando el comando git checkout
. Esto hace que obtener una forma segura de revisar las confirmaciones antes de integrarlas con su repositorio local.
al descargar contenido de un repositorio remoto, los comandos git pull
y git fetch
están disponibles para realizar la tarea. Puede considerar git fetch
la versión ‘segura’ de los dos comandos. Descargará el contenido remoto pero no actualizará el estado de trabajo de su repositorio local, dejando su trabajo actual intacto., git pull
es la alternativa más agresiva; descargará el contenido remoto para la rama local activa e inmediatamente ejecutará git merge
para crear una confirmación de fusión para el nuevo contenido remoto. Si tiene cambios pendientes en curso, esto causará conflictos y pondrá en marcha el flujo de resolución de conflictos de fusión.
cómo funciona git fetch con ramas remotas
para comprender mejor cómo funciona git fetch
, analicemos cómo organiza y almacena git las confirmaciones., Entre bastidores, en el directorio ./.git/objects
del repositorio, Git almacena todas las confirmaciones, locales y remotas. Git mantiene las confirmaciones de rama remotas y locales claramente separadas mediante el uso de referencias de rama. Las referencias de las ramas locales se almacenan en el ./.git/refs/heads/
. Ejecutar el comando git branch
generará una lista de las referencias de la rama local. El siguiente es un ejemplo de salida git branch
con algunos nombres de rama de demostración.,
git branch
master
feature1
debug2
Examinar el contenido de la etiqueta /.git/refs/heads/
directorio revelaría una salida similar.
ls ./.git/refs/heads/
master
feature1
debug2
las ramas remotas son como las ramas locales, excepto que se asignan a confirmaciones del repositorio de otra persona. Las ramas remotas tienen el prefijo del remoto al que pertenecen para que no las mezcles con ramas locales. Al igual que las ramas locales, Git también tiene referencias para las ramas remotas. Las referencias de rama remota viven en el directorio ./.git/refs/remotes/
., El siguiente fragmento de código de ejemplo muestra las ramas que podría ver después de obtener un repositorio remoto convenientemente llamado remote-repo:
git branch -r
# origin/master
# origin/feature1
# origin/debug2
# remote-repo/master
# remote-repo/other-feature
esta salida muestra las ramas locales que habíamos examinado anteriormente, pero ahora las muestra con el prefijo origin/
. Además, ahora vemos las ramas remotas con el prefijo remote-repo
. Puedes revisar una rama remota igual que una local, pero esto te pone en un estado separado HEAD
(igual que revisar una confirmación Antigua). Puedes pensar en ellas como ramas de solo lectura., Para ver sus ramas remotas, simplemente pase la bandera -r
al comando git branch
.
Usted puede inspeccionar ramas remotas con la habitual git checkout
y git log
comandos. Si aprueba los cambios que contiene una rama remota, puede fusionarla en una rama local con un git merge
normal. Por lo tanto, a diferencia de SVN, sincronizar su repositorio local con un repositorio remoto es en realidad un proceso de dos pasos: fetch, luego merge. El comando git pull
es un atajo conveniente para este proceso.,
Git fetch comandos y opciones
git fetch <remote>
Obtener todas las ramas del repositorio. Esto también Descarga todas las confirmaciones y archivos requeridos del otro repositorio.
git fetch <remote> <branch>
Mismo que el comando anterior, pero sólo recuperar la bifurcación especificada.
git fetch --all
un movimiento de potencia que obtiene todos los controles remotos registrados y sus ramas:
git fetch --dry-run
la opción --dry-run
realizará una ejecución de demostración del comando., Mostrará ejemplos de acciones que tomará durante la búsqueda pero no las aplicará.
git fetch a remote branch
el siguiente ejemplo mostrará cómo obtener una rama remota y actualizar su estado de trabajo local al contenido remoto. En este ejemplo, supongamos que hay un origen de repositorio central desde el cual se ha clonado el repositorio local usando el comando git clone
. Supongamos también un repositorio remoto adicional llamado coworkers_repo que contiene un feature_branch que configuraremos y recuperaremos., Con estos supuestos establecidos continuemos el ejemplo.
primero tendremos que configurar el repositorio remoto usando el comando git remote
.
git remote add coworkers_repo [email protected]:coworker/coworkers_repo.git
Aquí hemos creado una referencia al repositorio del compañero de trabajo usando la URL del repositorio. Ahora pasaremos ese nombre remoto a git fetch
para descargar el contenido.
git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch
ahora tenemos localmente el contenido de coworkers/feature_branch necesitaremos integrarlo en nuestra copia local de trabajo., Comenzamos este proceso usando el comando git checkout
para obtener la rama remota recién descargada.
git checkout coworkers/feature_branch
Note: checking out coworkers/feature_branch'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
El resultado de dicha comprobación de la operación indica que estamos en un desprendimiento de HEAD
estado. Esto es esperado y significa que nuestro HEAD
ref está apuntando a un ref que no está en secuencia con nuestra historia local. Siendo que HEAD
está apuntado a la referencia de coworkers/feature_branch, podemos crear una nueva rama local a partir de esa referencia., El ‘separado HEAD
‘ salida nos muestra cómo hacer esto utilizando la etiqueta git checkout
comandos:
git checkout -b local_feature_branch
Aquí hemos creado una nueva rama local llamado local_feature_branch. Esto pone las actualizaciones HEAD
para apuntar al último contenido remoto y podemos continuar el desarrollo sobre él desde este punto.
sincronizar origen con git fetch
el siguiente ejemplo recorre el flujo de trabajo típico para sincronizar su repositorio local con la rama maestra del repositorio central.,
git fetch origin
esto mostrará las ramas que se descargaron:
Las confirmaciones de estas nuevas ramas remotas se muestran como cuadrados en lugar de círculos en el diagrama de abajo. Como puede ver, git fetch
le da acceso a toda la estructura de ramas de otro repositorio.,
para ver qué confirmaciones se han agregado al maestro de origen, puede ejecutar un git log
usando origin/master como filtro:
git log --oneline master..origin/master
para aprobar los cambios y combinarlos en su rama maestra local, use el los siguientes comandos:
git checkout master
git log origin/master
entonces podemos usar git merge origin/master
:
git merge origin/master
las ramas origin / master y Master ahora apuntan a la misma confirmación, y se sincroniza con los desarrollos upstream.,
git fetch summary
en la revisión, git fetch
es un comando principal utilizado para descargar contenidos de un repositorio remoto. git fetch
se utiliza en conjunción con la etiqueta git remote
, git branch
, git checkout
y git reset
actualizar un repositorio local para el estado de un control remoto. El comando git fetch
es una pieza crítica de los flujos de trabajo colaborativos de git., git fetch
has similar behavior to git pull
, however, git fetch
can be considered a safer, nondestructive version.