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.
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:
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.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.
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.
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".
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 pushtransfiere tu historial local al remoto.git fetchdescarga metadatos de forma segura, mientras quegit pulldescarga 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.