Tengo una rama remota que creó mi amigo, esta rama no existe en mi repositorio local (no está desprotegido).

Ejecuto git fetch, luego git checkout <myFriendBranch>, ahora estoy actualizado con mi sucursal de amigos y no necesito ejecutar git merge o git pull.

¿Me pregunto porque?

Por ejemplo, si hay una rama en la que ambos estamos trabajando y existe en mi dispositivo local, git fetch solo no actualizará mi directorio de trabajo y tendré que ejecutar git merge o {{X2} }.

git
1
Nave Hazan 6 mar. 2018 a las 23:16

3 respuestas

La mejor respuesta

Comencemos explicando cómo almacenar su información internamente.

git almacena sus datos dentro de la carpeta .git. Esta carpeta contiene información sobre sucursales locales y remotas.

Las ramas locales y remotas son simplemente un puntero a un SHA1, y se almacenan dentro de la carpeta .git como se puede ver a continuación.

enter image description here


¿Qué es git fetch?

git fetch es un comando de porcelana que sincroniza el repositorio remoto con su repositorio local. Simplemente descarga todos los hunks, el delta de contenido que aún no existe en su máquina en su carpeta .git sin realizar modificaciones en su directorio de trabajo , simplemente descargue y Almacene el ocntent para su uso posterior.

git fetch no elimina las ramas remotas detectadas, por lo que si desea "limpiar" su repositorio local y eliminar las ramas eliminadas, use la bandera --prune.
agregar --all obtendrá todos los reomtes si tiene más de uno.

git fetch --all --prune

enter image description here

En este punto, las últimas confirmaciones solo se almacenan dentro de la carpeta .git. Si desea actualizar su directorio de trabajo local, debe fusionarlo. sigue entendiendo cómo y por qué.


¿Qué es git checkout?

git checkout <name> está cambiando entre ramas. Primero, verifique si la sucursal se ejecuta localmente; si ya se desprotegió anteriormente, si no, la buscará bajo los controles remotos y luego la registrará como una nueva sucursal local.


¿Qué es git pull?

git pull es simplemente un alises para git fetch + git merge.
git merge agregará el contenido de la rama deseada a su rama actual.
git pull origin master para Exampel buscará el control remoto y descargará el contenido que falta como se explica anteriormente y luego lo combinará (actualizará) en su directorio de trabajo local.

Aquí hay una salida detallada del comando git pull, puede ver que git primero busca el contenido y luego lo combina de nuevo con su rama

enter image description here

5
CodeWizard 10 mar. 2018 a las 03:56

Parece que su pregunta es sobre cuándo tiene que fusionarse o extraer, frente a cuándo no lo hace (y en su lugar solo puede buscar y pagar). Dado que pull es básicamente "buscar y fusionar", esto se reduce a: ¿cuándo debo fusionarme y por qué?

Se fusiona para incorporar cambios (que, por ejemplo, podrían ser cambios recuperados de un control remoto) en una rama existente.

En su primer ejemplo, su amigo creó una rama, y solo está copiando la rama de su amigo tal como está; no está incorporando sus cambios en ninguna rama existente, sino que está creando una nueva rama a partir de sus cambios. Entonces no necesitas fusionar nada. En cambio, después de buscar, crea una nueva rama. (Está utilizando un acceso directo para crear la rama, porque git reconoce su intención cuando intenta pagar una rama no existente pero exactamente una referencia de seguimiento remoto coincide con el nombre dado).

1
Mark Adelsberger 6 mar. 2018 a las 21:17

git fetch descarga los cambios del repositorio de su amigo y crea una rama llamada origin/friends-branch en su repositorio local. Cuando haces git checkout friends-branch, Git reconoce la rama de seguimiento remoto y crea automáticamente una nueva rama local con el nombre friends-branch.

2
Code-Apprentice 6 mar. 2018 a las 20:22