Hoy en día, el uso de un controlador de versiones de nuestro código es un punto obligado en los skills de cualquier desarrollador. En ese sentido, Git es el más popular y el más solicitado por las empresas a la hora de enumerar los conocimientos básicos que esperan de un developer.
Muchos programadores se valen de un abanico de comandos bastante limitado pero que, en la mayoría de los casos, es suficiente para «sobrevivir» en la industria del software. El problema se presenta cuando se enfrentan al primer conflicto, ya sea por algo simple como dos ramas que se niegan a mergearse o por un error catastrófico que ha hecho que nos carguemos todo el repositorio.
Si este es tu caso o si simplemente te gustaría conocer mas sobre esta potente herramienta, te invito a seguir leyendo.
Comandos útiles de Git
1- Pasar cambios a nueva rama: Mejorando tu GitFlow
Cuántas veces te ha pasado que comienzas a trabajar en un nuevo feature, algo nuevo que quieres probar o que el cliente solicitó y fruto de un brote de creatividad avanzas a un ritmo imparable. Escribes 100, 200 líneas de código y de repente te das cuenta de que estabas trabajando en la rama master. Tranquilo, que la solución es mas simple de lo que parece.
Solo necesitas ejecutar lo siguiente:
git checkout -b nueva-rama
Con este sencillo comando, todos los cambios que aun no hayamos agregado con git add pasarán a una nueva rama y podremos seguir trabajando con la tranquilidad de que nuestro master no se verá afectado.
2- Guardar en stash nuestros cambios
Si, en cambio, lo que queremos es pasarnos a otra rama pero aun no estamos listos para hacer commit de nuestro trabajo en el branch actual, podemos almacenar nuestros avances en stash para luego volver a ellos.
Para guardar todo aquello que no hayamos commiteado en stash, debemos ejecutar:
git stash
Con ello, podremos cambiar de rama sin problemas y podremos regresar a nuestro trabajo stasheado mas tarde.
Si lo que queremos es pasar todo lo que tenemos en stash a una nueva rama, podemos hacerlo con:
git stash branch nueva-rama
Para ver la lista de archivos que están en nuestro stash, corremos el comando:
git stash list
Por ultimo, si queremos limpiar el stash y deshacernos de todo lo que teníamos allí, hacemos los siguiente:
git stash drop
3- Restaurar archivos como un profesional
Si te ha pasado que has hecho cambios que no querias en un archivo y quieres restaurarlo con git, seguramente lo has hecho usando
git restore archivo.ext
Eso esta bien cuando se trata de un solo fichero, ¿pero qué pasa cuando debemos restaurar decenas de ellos? La respuesta es simple, con git restore (de nuevo).
Si queremos restaurar una serie de archivos con la misma extensión, pongamos por caso, todo los archivos .css que hemos modificado, podemos hacerlo así:
git restore '*.css'
Para restaurar todo el directorio actual:
git restore .
Y si queremos hacer un restore de TODO a partir del directorio principal:
git restore :/
4- Limpiar nuestro repositorio de archivos no trackeados
Muchas veces puede ocurrir que queramos limpiar nuestro directorio de trabajo de todo aquello que no hemos trackeado. Para hacer esto, Git cuenta con el comando clean.
Primero, es una buena practica (y nos evitara más de un dolor de cabeza) verificar qué archivos va a eliminar. Para ello, nos valemos del siguiente comando:
git clean --dry-run
Una vez que estamos seguros de que no estamos borrando nada importante, procedemos:
git clean -f
Hay que tener en cuenta que este comando no eliminará nada que este dentro de una carpeta ni tampoco aquellos archivos incluidos en nuestro .gitignore.
5- Agregar cambios a un commit
¿Alguna vez te ocurrió que debías hacer una serie de cambios y luego de hacer el commit te das cuenta de que te faltaron cosas? Esto puede arreglarse fácilmente con amend.
Lo único que deberás hacer es agregar los cambios que quieras incluir en el ultimo commit que hiciste mediante git add y luego ejecutar
git commit --amend
Esto agregará los cambios sin dejar registros en la historia de tu repositorio. Este comando también es útil si quieres cambiar el mensaje de tu confirmación antes de hacer un push.
6- Ver las ramas remotas de un repositorio
Seguramente el comando git branch no sea ninguna novedad para vos, pero habrás notado que este solo te muestra las ramas locales de tu repositorio. ¿Como podemos ver las ramas remotas si aun no las trajimos?
Con el comando
git branch -r
obtendremos un listado de los branches remotos. Y si deseamos compararlas con las ramas locales, podemos hacerlo con
git branch -a
7- Buscar una palabra en la historia de tus commits
Quizás en algún punto hayas querido saber en qué momento usaste cierta variable o función, pero buscarlo manualmente entre los cientos de commits que componen tu proyecto se vuelve una tarea colosal. No te preocupes, como en casi todos los casos, hay un comando de Git que nos permite hacerlo:
git log -S miFuncionPerdida
Con esta simple instrucción es posible rastrear cualquier cosa que alguna vez hayamos commiteado en nuestro proyecto.
8- Ver el historial de commits por usuario
Si estas llevando adelante un proyecto en el que participan varias personas, es posible que en algún momento quieras conocer la cantidad de contribuciones que ha hecho cada una de ellas. Para esto, nuestro controlador de versiones favorito, cuenta con una serie de instrucciones sumamente útiles:
git shortlog
Muestra el historial de commits agrupados por usuario.
git shortlog -sn
Cuenta la cantidad de commits que cada usuario ha realizado, sin considerar los que han sido borrados.
git shortlog -sn --all
Hace lo mismo que el anterior, pero este incluye los commits borrados y mergeados.
git shortlog -sn --all --no-merges
Tal como puede suponerse, este comando cuenta los commits, exlcuyendo los que han sido mergeados.
9- Encontrar al culpable de un cambio
Siguiendo el ejemplo anterior, imagina que alguno de los desarrolladores que trabajan en tu equipo agregó accidentalmente un bug en algún archivo del código. Tu deber como líder del proyecto será, no solo encontrar ese fallo, sino también al culpable de introducirlo para castigarlo como se merece… o, al menos, pedirle que lo solucione.
Para ello, puedes usar:
git blame archivo
Esto nos dirá quién hizo qué en ese archivo. Pero si quieres afinar aun mas la búsqueda para detectar quién introdujo un cambio en una linea especifica, puede hacerlo con:
git blame archivo -L11,14
Donde el 11 es la linea desde la que queremos comenzar a buscar, hasta llegar a la linea 14 del archivo.
10- Busca palabras mediante grep
Si vienes del mundo Linux, seguramente conocerás grep y lo que hace, pero sino es así, debes saber que, básicamente, es una forma de buscar una palabra o cadena en un archivo o directorio. Este comando también está disponible en Git (si, aun en su versión para Windows) y te permitirá encontrar cualquier cosa en tu árbol de trabajo:
git grep busqueda
Si quieres saber en detalle en que archivo y en que linea esta lo que buscas, solo debes agregar lo siguiente:
git grep -n busqueda
Y si nos ponemos un poco más maniáticos, podemos contar la cantidad de veces que aparece el término que estamos buscando:
git grep -c busqueda
NOTA: Ten en cuenta que este comando es sensible a mayúsculas y minúsculas.
11- Recolectar cambios con Cherry-Pick
Esta técnica consiste en poder traer al estado actual de tu rama, commits que hayas hecho en otras ramas sin necesidad de mergear todo el branch.
Para usar este comando, deberás conocer de antemano el hash del commit que quieras traer, lo cual puedes obtener fácilmente con git log, por ejemplo.
git cherry-pick d6ac679c
Para usarlo, deberás estar parado en la rama a la que quieras incrustarle los commits. Ten en cuenta que esto es considerado como una mala práctica, por lo cual, úsalo con sabiduría.
12- Traer cambios desde un repositorio y enviarlos a otro
Para agregar un nuevo remoto como origen de nuestros datos, debemos hacer lo siguiente:
git remote add upstream https://github.com/yo/miRepo.git
donde upstream será el nombre de ese origen (puedes ponerle el nombre que quieras). Entonces, cuando queramos pullear los cambios del repositorio remoto hacia nuestra rama master, solo tendremos que hacer
git pull upstream master
13- Poner tags a tus commits
Agregar etiquetas a tus commits te permitirá tener un código mejor organizado, además de que muchas herramientas de Integración Continua las usan para determinar que mandar a producción. Git nos ofrece una forma muy simple de crear tags y subirlas a nuestro repositorio remoto.
Para crear un tag, hacemos lo siguiente:
git tag -a 1.0Alpha -m "Alpha version" fb9b1c2
Donde «1.0Alpha» es nuestro tag, «Alpha version» el mensaje que pondremos para tener más detalles sobre nuestra etiqueta (tal como lo hacemos con los commits) y fb9b1c2 el hash del commit al que queremos taggear.
Para pushear nuestro tag, solo debemos hacer:
git push origin --tags
Para ver los tags que hemos creado:
git tag
O bien:
git show-refs --tags
Y, finalmente, si queremos eliminar algún tag, primero lo haremos en nuestro repositorio local:
git tag -d nombre-del-tag
Y luego en nuestro remoto:
git push origin :refs/tags/nombre-del-tag
14- Ver un gráfico de tus ramas en Git Bash
Cuando estamos trabajando en un repositorio de gran tamaño en el que participan varios desarrolladores, analizar el flujo de trabajo que hemos utilizado y la forma en la que nuestros branches se crean y fusionan puede ser un dolor de cabeza.
Por suerte, Git cuenta con una serie de herramientas para poder estudiar esto de un forma más visual. Si en tu consola ejecutas:
git log --all --graph
Verás una serie de lineas de colores que indicaran el flujo de nuestros branches a lo largo de la historia de nuestro repositorio.
Si queremos ver más detalles, podemos hacer:
git log --all --graph --decorate --oneline
15- GITK: La herramienta visual de GIT
Otra de las herramientas visuales con las que cuenta Git para poder analizar nuestro workflow es GitK. Gracias a esta sencilla interfaz, podremos ver información super detallada sobre nuestros commits y el comportamiento de cada colaborador.
Para abrir GitK, solo debes ejecutar lo siguiente:
gitk
Si estás trabajando en Debian o alguna otra distribución de Linux, es posible que GitK no esté instalado por defecto. De ser así, solo tendrás que instalarlo con
apt-get install gitk
Y listo. Todo muy sencillo.
16- Ponerle alias a tus comandos
Git tiene muchos comandos, algunos de los cuales pueden ser muy largos y difíciles de recordar, sobre todo si los customizamos con parámetros.
Afortunadamente, podemos ponerles nuestros propios alias y así simplificar nuestra tarea diaria.
Tomemos el ejemplo del comando que vimos en el punto 14, git log –all –graph –decorate –oneline al cual le pondremos el alias grapho. Para lograr esto, sólo tenemos que hacer:
git config --global alias.grapho "git log --all --graph --decorate --oneline"
Ahora podremos llamarlo solo con ejecutar:
git grapho
17- Ver la documentación de cada comando de Git
Hemos visto varios comandos muy útiles, pero ciertamente GIT tiene muchos más. Una forma sencilla y rápida de ver qué hace cada comando es con
git comando --help
De esa forma accederemos a la documentación oficial de esa instrucción en particular.
Ya sea que uses GitHub, GitLab o Bitbucket, estoy seguro de que esta lista te será de utilidad para tu trabajo. Si conoces más comandos que consideres que deberían agregarse, no dudes en dejarlos en los comentarios.
Buen trabajo por escribir este peazo de post, todo clarísimo y de comprender fácil, gracias admin
<3