Aunque existen aplicaciones específicas y herramientas integradas en los entornos de desarrollo para trabajar con Git, también es muy 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 generalmente está preinstalado en Mac y Linux. Ejecutar:

git --version

para mostrar la versión instalada. Si no, descargar e instalar Git y comprobar de nuevo con git --version.

Configuración global de Git (config)

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

identifica el nombre de usuario y el correo electrónico del autor de cada cambio confirmado. Verificar con:

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

Con --global se aplicará esta configuración a todos los repositorios del equipo. Si no se usa --global se estará cambiando la configuración específica del repositorio actual.

Comprobar la configuración global de Git

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á 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.

Repositorios

Clonar un repositorio en local (clone)

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

descarga una copia en un directorio local usando 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

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

Añadir un repositorio remoto

Hay que usar el comando git remote add {nombre} {ruta-del-repositorio} para añadir un enlace a un repositorio remoto. Por ejemplo:

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 se puede 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 master 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 maestra (master branch) y fusionarlas con la rama principal al terminar.

Crear una rama

Para crear nuevas ramas hay que usar el comando git checkout -b {nombre-de-la-rama}. Por ejemplo:

git checkout -b funcionalidad_x

Trabajar en una rama existente

Se puede volver a la rama principal ejecutando:

git checkout master

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

Borrar una rama

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

git checkout -d funcionalidad_x

No olvidar que una rama no estará disponible para los demás usuarios a menos que se envíe al repositorio remoto.

Cambios

Descargar los últimos cambios del proyecto (pull)

Para trabajar con una copia actualizada de los archivos del repositorio (por ejemplo, cuando se empieza a trabajar en un proyecto), hay que ejecutar git pull {remoto} {nombre-de-la-rama} para descargar todos los cambios realizados por los usuarios desde la última vez que se clonó o se actualizó el proyecto.

Normalmente {remoto} suele ser origin. Es de donde se clonó el repositorio e indica la ruta del mismo en el servidor remoto. Puede usarse master en {nombre-de-la-rama} para descargar los archivos de la rama principal, o usar el nombre de la rama en la que se está trabajando actualmente o usar cualquier otra rama.

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

Para descargar los cambios de la rama actual sólo hay que ejecutar:

git pull

Ver las diferencias (diff)

Para ver las diferencias entre los cambios locales y las versiones del repositorio que se clonaron o actualizaron hay que usar 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 se añaden, modifican o eliminan archivos y/o directorios, Git lo sabe. Para comprobar el estado de estos cambios ejecutar:

git status

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

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

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

Se recomienda esta guía para escribir los mensajes de confirmación de cada contribución al repositorio.

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 usar el comando git push {remoto} {nombre-de-la-rama}. Por ejemplo, para enviar a la rama maestra del repositorio origin:

git push origin master

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 master 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 ejecutar:

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 usandorevert:

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

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 GitLab, Bitbucket ó GitHub.

Al clonar un repositorio bifurcado no se mantiene la conexión con el repositorio remoto original, por lo que podrán 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.

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 *