Aunque existen aplicaciones específicas y herramientas integradas en los entornos de desarrollo para trabajar con Git, es necesario conocer los conceptos y los principales comandos para operar con este sistema de control de versiones.

Primeros pasos

Comprobar si Git está instalado

Git suele estar preinstalado en Mac y Linux. Para mostrar la versión ejecuta:

git --version

Si no, instala Git y comprueba de nuevo con git --version.

Configuración global de Git (config)

Primero se recomienda configurar tu nombre y correo electrónico para identificarte como autor de tus cambios en los repositorios:

git config --global user.name "Nombre De Usuario"
git config --global user.email "correo@ejemplo.com"

Y comprueba con:

git config --global user.name
git config --global user.email

Con --global configuras en todos los repositorios del usuario. Con --system la configuración será para todo el sistema. Y si se omite o se indica --local la configuración será específica para el repositorio actual.

Para comprobar la configuración global de Git ejecuta:

git config --global --list

Más sobre cómo configurar Git por primera vez en la documentación de Git.

Inicializar un directorio local ya existente (init)

git init

creará en el directorio del proyecto un directorio .git con los archivos de configuración de Git. Ejecutar git init en un repositorio existente es un procedimiento seguro, no se sobrescribirán elementos que ya estuviesen en el mismo.

Una vez que el directorio se ha inicializado se puede añadir un repositorio remoto o, llegado el momento, enviar cambios al repositorio remoto.

Pedir ayuda

En la línea de comandos sustituye, por ejemplo, {comando} por init visto en el apartado anterior:

git help {comando}
git {comando} --help

Y también en Linux:

man git-{comando}
man git {comando}

Repositorios

Clonar un repositorio en local (clone)

git clone git@gitlab.com:manuelcillero/proyecto.git

descargará una copia del repositorio en el directorio actual con el nombre del proyecto. Mantiene un enlace al repositorio remoto, y lo deja listo para empezar a navegar y trabajar localmente en los archivos.

Ver los repositorios remotos (remote)

git remote -v

mostrará los repositorios remotos del proyecto. Si sólo escribes git remote no se mostrarán las rutas.

Añadir un repositorio remoto

Usa el comando git remote add {nombre} {ruta-del-repositorio} para añadir un enlace a un repositorio remoto:

git remote add origin git@gitlab.com:manuelcillero/proyecto.git

Si ya existe una ruta para origin se producirá un error. Entonces se puede usar otro nombre para la nueva ruta. O renombrar el repositorio remoto existente con git remote rename {nombre} {nuevo-nombre}:

git remote rename origin destination

O también puedes eliminar la ruta del repositorio remoto existente con git remote rm {nombre}:

git remote rm origin

El comando git remote rm no elimina el repositorio remoto del servidor, simplemente elimina del repositorio local el enlace al repositorio remoto.

Más información sobre cómo Git administra los repositorios remotos en la documentación de Git.

Ramas (checkout)

Las ramas suelen utilizarse para desarrollar funcionalidades aisladas unas de otras. Siempre se está en una rama (branch) cuando se trabaja con Git. La rama main es la rama por defecto cuando se crea un repositorio. Se pueden crear nuevas ramas para trabajar en el código sin afectar a la rama principal (main branch) y fusionarlas al terminar.

Crear una rama

Para crear nuevas ramas usa el comando git checkout -b {nombre-de-la-rama}:

git checkout -b funcionalidad_x

Trabajar en una rama existente

Puedes volver a la rama principal ejecutando:

git checkout main

O cambiar a una rama existente usando el comando git checkout {nombre-de-la-rama}.

Borrar una rama

Para borrar una rama usa el comando git checkout -d {nombre-de-la-rama}:

git checkout -d funcionalidad_x

No olvides que una rama no estará disponible para los demás usuarios a menos que la envíes al repositorio remoto.

Cambios

Descargar los últimos cambios del proyecto (pull)

Para tener una copia actualizada de los archivos del repositorio (por ejemplo, cuando retomas tu trabajo en un proyecto), ejecuta git pull {remoto} {nombre-de-la-rama} para descargar todos los cambios realizados por los usuarios desde la última vez que clonaste o actualizaste el proyecto.

Normalmente {remoto} suele ser origin. Puedes usar main en {nombre-de-la-rama} para descargar los archivos de la rama principal, o usar el nombre de la rama en la que estás trabajando actualmente o usar cualquier otra rama.

A partir de este momento podrás añadir accesos remotos adicionales o crear nuevas ramas según necesites.

Para descargar los cambios de la rama actual sólo ejecuta:

git pull

Ver las diferencias (diff)

Para ver las diferencias entre tus cambios locales y las versiones del repositorio usa el comando git diff {rama-fuente} {rama-destino}. Para revisar los cambios de la rama actual basta con ejecutar:

git diff

Ver los cambios realizados (status)

Es importante estar al tanto de los cambios introducidos en el proyecto. Cuando añades, modificas o eliminas archivos o directorios, Git lo sabe. Para comprobar el estado de estos cambios ejecuta:

git status

Añadir y confirmar cambios locales (add y commit)

Usa el comando git add {archivo(s) ó directorio(s)} para añadir al área de preparación los archivos y directorios que vas a confirmar (commit).

Luego usa git commit -m "Mensaje con la intención de los cambios" para confirmar (y guardar en local) los archivos preparados.

Se pueden usar tantos git add como sean necesarios antes de confirmar los cambios.

Añadir y confirmar todos los cambios locales

git add .
git commit -m "Mensaje con la intención de los cambios"

El carácter . identifica todos los cambios del directorio actual y sus subdirectorios.

Modificar el mensaje de la última confirmación

git commit --amend -m "Corrige mensaje con la intención de los cambios"

Añadir archivos a la última confirmación sin cambiar el mensaje

git add archivo_por_agregar.md
git commit --amend --no-edit

Guardar temporalmente los cambios sin confirmarlos

git stash --all

 Traer a la rama actual los cambios guardados temporalmente

git stash pop

Borrar los cambios guardados temporalmente

git stash drop

Enviar cambios al repositorio remoto (push)

Para enviar los cambios locales guardados y confirmados (commits) al repositorio remoto usa el comando git push {remoto} {nombre-de-la-rama}. Por ejemplo, para enviar a la rama principal del repositorio origin:

git push origin main

Si se usa el argumento -u se asumen {remoto} y {nombre-de-la-rama} como referencia. Entonces sólo habría que ejecutar git push -u origin main una vez, y las siguientes veces git push sin más.

Deshacer cambios

Descartar todos los cambios de la rama

Para eliminar los cambios locales que no han sido añadidos al área de preparación ejecuta:

git checkout .

Esta operación elimina los cambios en los archivos, no los archivos en sí.

Descartar cambios añadidos en preparación (reset)

Para eliminar los últimos cambios locales añadidos al área de preparación que aún no han sido confirmados (commits):

git reset .

Deshacer la confirmación más reciente

Para deshacer la confirmación (commit) más reciente, si aún no se ha enviado al repositorio remoto:

git reset --hard HEAD~1

¡CUIDADO con la opción --hard!, porque retrocede al commit indicado y se pierden todas las confirmaciones (y sus modificaciones) posteriores. HEAD~1 es un atajo para apuntar al commit anterior al que nos encontramos.

Para deshacer la confirmación (commit) sin perder los cambios:

git reset --soft HEAD~1

La opción --soft HEAD~1 deshace el último commit pero deja los cambios pendientes en el área de preparación de archivos y/o directorios.

Pero si la última confirmación ya ha sido enviada al repositorio remoto, entonces la mejor opción es ejecutar un nuevo commit que lo deshaga usando revert:

git revert HEAD

De esta forma, cualquier usuario podrá actualizar desde el repositorio remoto todos los cambios realizados, incluyendo las confirmaciones que se han revertido.

Advertencia: en general, una confirmación en Git no se debería deshacer, especialmente si ya se envió al repositorio remoto. Aunque se pueda deshacer una confirmación siempre es mejor evitar este escenario trabajando con cuidado.

Repositorios bifurcados (fork)

Bifurcar (fork) un repositorio no es una operación propia de Git, más bien es una clonación del repositorio en un servidor Git. Por eso es una característica común disponible en GitHub, GitLab ó Bitbucket.

Al clonar un repositorio bifurcado no se mantiene la conexión con el repositorio remoto original, por lo que se podrá experimentar y aplicar cambios para decidir después si se desean compartir o no, pero sin afectar el proyecto original.

Para obtener los cambios del repositorio remoto original hay que añadir un enlace al mismo, siendo habitual el uso del nombre upstream, así:

git remote add upstream {ruta-del-repositorio-original}

De esta forma se podrá usar en el repositorio local git pull upstream para obtener las últimas actualizaciones del repositorio remoto original, y git push origin para enviar los cambios locales al repositorio remoto.

Más información sobre repositorios bifurcados en stackoverflow.

Referencias

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *