4.2 Sincronizando tu trabajo

Cómo usar git push y git pull para colaborar en red.

Con el enlace remoto establecido, el flujo de desarrollo se convierte en un baile continuo de enviar tus aportes al servidor y descargar los aportes de los demás.

Compartiendo tus aportes: git push

Tus commits locales son tuyos y de nadie más, hasta que decidas publicarlos. Para enviar el trabajo de tu rama actual a tu repositorio en internet (origin), ejecuta git push.

Imagina que cada commit es una caja. El comando push toma todas las cajas que tú tienes en local y que el servidor remoto no conoce, y las transfiere por la red, actualizando la línea temporal del servidor.

Diagrama del proceso de git push
Proceso de git push: transferencia de commits locales al repositorio remoto.

 

Descargando cambios ajenos: pull vs fetch

De igual forma, tu ordenador no sabe si tu compañero Carlos ha añadido nuevas funcionalidades en el servidor durante la noche. Necesitas traer esos cambios explícitamente.

Existen dos formas principales de hacerlo, y comprender la diferencia es marca de un buen desarrollador:

  1. git fetch: Descarga la información y los commits del servidor, pero NO toca tus archivos locales. Es como mirar el correo para ver si tienes paquetes, pero sin abrirlos. Te permite observar con seguridad qué ha cambiado.
  2. git pull: Hace dos cosas a la vez. Primero hace un fetch (descarga el código ajeno) e inmediatamente después intenta mezclarlo y fusionarlo matemáticamente con tus archivos locales.
Diagrama comparativo de git fetch y git pull
Comparación entre git fetch y git pull.

El temido Conflicto (Merge Conflict)

¿Qué sucede si Carlos editó la línea 50 de index.html, y mientras tanto tú editaste también la línea 50 del mismo archivo en tu máquina, y luego intentas hacer git pull?

Git es muy inteligente, pero no puede leer tu mente. Cuando descubre que dos personas intentaron cambiar exactamente el mismo pedazo de texto, se detiene y marca los archivos en estado de "Conflicto de fusión" (Merge Conflict). Si haces un git status, lo verás en rojo.

Diagrama del proceso de resolución de conflictos en Git
Proceso de resolución de conflictos en Git.

Si abres tu código en ese momento, te llevarás un susto. Git inserta marcadores extraños directamente en tu archivo:

<<<<<<< HEAD

Bienvenidos a la web de María

=======

Hola mundo, versión de Carlos

>>>>>>> commit_id_carlos

No entres en pánico. Un conflicto es simplemente Git pidiéndote que decidas. Tu trabajo es editar el archivo, borrar todos esos marcadores extraños (los `<<<<`, `====`, `>>>>`) y dejar el código exactamente como quieres que quede en la versión final. Una vez solucionado, haces un git add y un git commit nuevo para decirle a Git: "El conflicto está resuelto".

Regla de Oro: Git te rechazará cualquier git push si alguien más ha subido cambios al servidor que tú no tienes. Siempre debes descargar (pull) y resolver cualquier conflicto primero, antes de que el servidor te permita empujar tu código.

Puntos clave

  • git push transfiere tu historial local al remoto.
  • git fetch descarga metadatos de forma segura, mientras que git pull descarga y los mezcla agresivamente en tus archivos.
  • Un "Merge Conflict" ocurre cuando dos personas editan simultáneamente la misma sección; se resuelve borrando los marcadores de Git y haciendo un commit final.
Inicia sesión e inscríbete para guardar tu progreso.