Contenido:


Introducción

Git es un controlador de cambios de código abierto (open source) y GitHub una plataforma de desarrollo colaborativo basada en Git.

Un controlador de cambios te permite ir reportando cada modificación en tu código, así como tener diferentes versiones de manera simultanea y la posibilidad de regresar a una versión anterior por lejana que sea. Esto hace que Git sea muy interesante y útil. Existen varias plataformas de desarrollo que utilizan Git como base: GitLab, SourceForge, GitHub y Bitbucket, entre otras.

La intención de esta entrada es describir algunos comandos de Git (para GitHub, en particular) que en mi caso personal considero muy útiles y que no encontré tan rápido en la red la primera vez que intenté usarlos. Este escrito es para mi uso personal, pero si a alguien le es de utilidad, pues bienvenid@.

Se asumirán situaciones en las que ya se tiene instalado Git, cuenta y repositorio de GitHub. Para instalar Git desde cero, navegar en la plataforma web de GitHub y otras cuestiones hay mucha información en Internet, entre otras fuentes:

commit

Un commit es una confirmación de los cambios realizados en el código y Git mediante esa instrucción le asigna un identificador al bloque de cambios involucrados. Además, uno puede asignar un mensaje o descripción para recordar en qué consistieron esos cambios. En la práctica, la forma que me ha resultado más fácil es:

git commit -m "descripción del cambio" script_mod1.py script_mod2.py

La bandera -m le dice a Git que le pasaremos, dentro de la misma instrucción, un mensaje (o descripción) del cambio. Si no se indican los archivos modificados, el commit incluirá todos los cambios realizados en el repositorio, se puede indicar así:

git commit -am "descripción del cambio" 

Todas las opciones de commit: git-commit docs

push

Para “empujar” los cambios indicados en un commit al repositorio remoto se utiliza el comando push.

git push

En la forma que más suelo usar este comando es así, a secas. De esta manera, Git busca en su configuración dónde deben enviarse los nuevos cambios, y si no encuentra configuración alguna, lo hace en origin.

Documentación completa de este comando: git-push docs


Usar el repositorio de un tercero

Descripción de la situación: Nos interesa mucho el repositorio de GitHub de un tercero y queremos utilizarlo para nuestros fines personales, ¿qué opciones hay?

  1. Descargar el comprimido desde su página web. Esto solo permite acceder al código fuente.
  2. Clonarlo vía git clone https://github.com/otro_usuario/repo_interesante.git. Esto permite ver todo el histórico de Git y acceder a versiones previas. De esta manera, también se puede mantener actualizada nuestra copia local mediante git pull.
  3. Mediante un fork. Con esta opción creamos una copia en nuestro propia cuenta de GitHub. Me parece la opción más completa si uno planea trabajar en el código y hacer modificaciones.

Nos centraremos en la opción 3.

fork

Un fork se puede hacer de manera muy fácil en la plataforma web de GitHub desde la página del repositorio original. Después, podemos clonar nuestra copia a nuestra computadora para trabajar en el código. Sin embargo, a diferencia de la opción 2, no se puede hacer directamente git pull para actualizar nuestra copia local con los cambios hechos en el repositorio original de un tercero, pues nuestra copia local solo está conectada a nuestra copia remota, para enlazar nuestra copia forkeada al repositorio original, es necesario hacer lo siguiente:

git remote add upstream git://github.com/otro_usuario/repo_original.git
git fetch upstream

Una vez hecho lo anterior, se puede actualizar nuestra copia local desde el repositorio original mediante:

git pull upstream master

Comparar y regresar

Para comparar dos versiones del código, o bien, para regresar a una versión anterior. Es útil ver el historial de commits:

git log

esto despliega el identificador de cada commit, su autor y la fecha. A partir de ahí uno puede usar esos identificadores para comparar dos versiones:

git diff identificador_commit_i identificador_commit_j

o bien, para regresar a una versión anterior:

git reset --hard identificador_commit_i 

donde la bandera --hard indica que se resetearán los archivos del índice y del directorio de trabajo. También está la opción --soft que no resetea estos archivos. Para más detalles de este comando, se recomienda visitar aquí.


Entre las ramas

Las ramas (branch) son muy útiles para mantener ordenado el código y hacer modificaciones bajo propósitos específicos. Por defecto, la rama existente es master. Para ver las ramas existentes:

git branch

Para crear una nueva rama:

git checkout -b [nombre_de_la_nueva_rama]

y subirla al remoto:

git push origin nombre_de_la_nueva_rama

Para cambiar de rama:

git checkout nombre_rama

Borrar rama local:

git branch -d nombre_rama

después, para borrar la rama en remoto:

$ git push origin :nombre_rama

Similar que con los archivos, para comparar dos ramas:

git diff nombre_rama_1..nombre_rama_2