Dos personas, una lista de precios
Dos empleados de una frutería editan la lista de precios la misma tarde. Uno sube el precio de las naranjas. La otra corrige una falta de ortografía en esa misma línea.
Si comparten una sola carpeta, uno pierde su trabajo. El control de versiones guarda las dos versiones y enseña justo dónde no coinciden.
Al terminar esta lección
Nota
Puedo trabajar en una rama y fusionarla de vuelta.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Remoto | copia compartida de un repositorio en un servidor |
| Clonar | copiar un repositorio con todo su historial |
| Rama | línea de trabajo aparte, con sus propios commits |
| Fusión | traer a una rama el trabajo de otra |
| Conflicto | fusión en que dos ramas cambiaron las mismas líneas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un clon copia todo el historial
Un remoto es la copia compartida de un repositorio, guardada en un servidor como Gitea. Para trabajar con él, lo clonas. Recibes todos los archivos y todos los commits anteriores.
El Gitea del laboratorio tiene un repositorio llamado hello-git. El primer Run lo clona en una carpeta de práctica llamada review. El segundo lee su historial, del más nuevo al más antiguo.
Clona el repositorio en review
git clone http://gitea:3000/student/hello-git.git reviewSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee el historial, una línea por commit
git -C review --no-pager log --format="%h|%an|%s"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una rama mantiene tu trabajo aparte
Una rama es una línea de commits propia. Cambias archivos en ella y la rama principal sigue como estaba.
Cada commit guarda quién lo hizo. Antes, dile a Git tu nombre y tu correo para esta carpeta. Después crea una rama llamada horario-tarde y cambia una línea en ella.
Esta carpeta es de práctica. No la subirás.
Fija tu nombre para esta carpeta
git -C review config user.name "Estudiante"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Fija tu correo para esta carpeta
git -C review config user.email "[email protected]"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Crea una rama y cámbiate a ella
git -C review switch -c horario-tardeSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cambia una línea en la rama
sed -i 's/Ada Lovelace/Ada Lovelace (anfitriona)/' review/visitors.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Haz commit del cambio en la rama
git -C review commit -am "Marcar a Ada como anfitriona"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una fusión une dos líneas de trabajo
Cuando dos ramas cambian líneas distintas, Git las fusiona solo. Cuando las dos cambian la misma línea, Git no puede elegir, así que se detiene y te pregunta. Eso es un conflicto.
Vas a provocar uno a propósito. Vuelve a la rama principal. Cambia la misma línea de otra forma. Haz commit. Después fusiona la otra rama.
Vuelve a la rama principal
git -C review switch mainSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cambia la misma línea de otra forma
sed -i 's/Ada Lovelace/Ada L. Lovelace/' review/visitors.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Haz commit del cambio en main
git -C review commit -am "Usar las iniciales"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Fusiona la otra rama
git -C review merge horario-tardeSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee lo que Git escribió en el archivo
cat review/visitors.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Tres líneas marcan las dos versiones
Git escribió las dos versiones en el archivo. La línea <<<<<<< HEAD abre la versión de la rama en la que estás. La línea ======= la cierra. La línea >>>>>>> horario-tarde cierra la otra versión.
Para resolverlo, editas el archivo hasta dejar el texto que quieres y borras las tres líneas de marca. Después haces git add del archivo y git commit.
Aquí te detienes y deshaces la fusión.
Deshaz la fusión
git -C review merge --abortSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Dibuja las dos ramas como un grafo
git -C review --no-pager log --oneline --graph --allSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que un conflicto significa que el repositorio está roto o que alguien se equivocó. Significa que dos personas cambiaron las mismas líneas. No se pierde nada. Elige el texto correcto, o usa merge --abort para volver a antes de la fusión.
Para ir más lejos
Repite la fusión en review y esta vez resuélvela. Deja la línea como Ada L. Lovelace (anfitriona), borra las tres líneas de marca y haz git add del archivo. Haz commit con --no-edit, que usa el mensaje que propone Git en lugar de abrir un editor.
Dibuja otra vez el grafo y explica en qué se diferencia el commit de fusión de los demás. No subas nada: review sigue siendo de práctica.