Comandos Git - Guía básica para todos los desarrolladores

Estos son sólo algunos comandos básicos que te pueden ayudar a aclarar tus dudas respecto al funcionamiento de los comandos de git, si vas comenzando a usarlo este post seguro que te ayudará, no te hago más el cuento largo y sin más te dejo con la guía.

Introducción a Git

Versión

Conjunto de nuevas características y funcionalidades de un software disponibles para el usuario final.

Sistema de control de versiones

Herramienta para el manejo de las diferentes versiones de software.

Repositorio

Es una caja de almacenamiento donde se va guardar todo el proceso del desarrollo del software.

Instalación de Git

  • Debian →sudo apt install git

  • Cent OS →sudo yum install git

  • MacOS → brew install git o' descargar el instalador

  • Windows → Descargar el instalador

Configuracion local

  • git config —-help muestra la ayuda de lo que podemos hacer con el comando config

  • git config —global user.name\="<tu_nombre>" establece el nombre que usaremos de forma global

  • git config —global user.email\="<tu_correo>" establece el correo que usaremos de forma global

  • git config —list muestra los valores que tenemos actualmente en nuestra configuración global

Comandos básicos de Git

  • git help muestra una lista con los comandos más utilizados en GIT

  • git init podemos ejecutar ese comando para crear localmente un repositorio con GIT y así utilizar todo el funcionamiento que GIT ofrece, basta con estar ubicados dentro de la carpeta donde tenemos nuestro proyecto y ejecutar el comando

  • git add ruta agrega al repositorio los archivos que indiquemos

  • git add -A agrega al repositorio todos los archivos y carpetas que estén en nuestro proyecto, los cuales GIT no está siguiendo

  • git add . agrega los archivos del directorio donde estoy ubicado en la terminal

  • git commit -m "mensaje" + archivos crea la confirmación con un mensaje de los archivos que le indiquemos de esta manera quedan guardadas nuestras modificaciones

  • git restore --staged <nombre_archivo> quita archivos del staging area después de haber sido agregadas.

  • git commit -m "mensaje" rea la confirmación con un mensaje de los archivos que han sido modificados y que tenemos en el staging area

  • git checkout -b <nombre_branch> crea un nuevo branch o rama y automáticamente Git se cambia al branch creado, clonando el branch desde donde ejecutamos el comando

  • git branch nos muestra una lista de los branches que existen en nuestro repositorio

  • git checkout <nombre_branch> sirve para moverse entre branches, en este caso vamos al branch que indicamos en el comando

  • git merge <nombre_branch> realiza un merge entre dos ramas, en este caso la dirección del merge sería entre el branch que indiquemos en el comando, y el branch donde estemos ubicados

  • git status nos indica el estado del repositorio, por ejemplo, cuales están modificados, cuales no están siendo seguidos por Git, entre otras características

  • git clone URL/name.git NombreProyecto clona un proyecto de Git en la carpeta NombreProyecto

  • git push origin NombreDeBranch luego de que hicimos un git commit, si estamos trabajando remotamente, este comando va a subir los archivos al repositorio remoto, específicamente al branch que indiquemos

  • git pull origin NombreDeBranch hace una actualización en nuestro branch local, desde un branch remoto que indicamos en el comando

  • git remote -v muestra el nombre de los origenes remotos que tenemos en el repositorio actual

  • git diff <nombre_archivo> devuelve los cambios que realizamos en un archivo

  • git diff --stat <nombre_archivo> generar un resumen condensado de información de las creaciones o eliminaciones en un archivo

  • git diff --numstat <nombre_archivo>__ similar a--stat** , pero muestra el número de líneas agregadas y eliminadas en notación decimal y el nombre de la ruta sin abreviatura

Otros Métodos Para Reescribir el Historial

Existe un comando que si de pronto se nos pasó agregar unos cambios al último commit nos permite agregarlos esto solo si hemos subido los cambios del commit al servidor, para ello ejecutamos el siguiente comando.

git commit --amend -m "Un mensaje actualizado"

Por otro lado, si queremos agregar archivos sin modificar el mensaje añadimos los archivos y después ejecutamos el siguiente comando.

git commit --amend --no-edit

Tags y versiones en Git y GitHub

Git permite etiquetar puntos específicos del historial como importantes. Los tags sirven cuando necesitamos marcar un punto especifíco en la historia de nuestro trabajo(para los releases). De esta forma podemos hacer seguimiento al progreso de nuestro proyecto e identificar los cambios más fácilmente entre cada versión, incluso podemos hacer un checkout a uno de esos tags.

Crear un tag

git tag -a nombre-tag -m "mensaje" HASH-a-etiquetar Si se omite el HASH, el tag se referencia al commit actual.

Ver lista de tags

git tag -l comando para ver la lista de tags creados.

Ver detalle del tag

git show nombre-tag Comando para ver la información de la etiqueta junto con el commit que está etiquetado.

Ver referencias

git show-ref --tags Comando para ver el hash al que hace referencia cada tag.

Enviar etiqueta un GitHub

git push origin --tags Este comando envía los tags creados a GitHub, aunque no aparezcan en el staging area en espera de ser enviados estos se envían con este comando.*

Eliminar un tag localmente

git tag -d nombre-del-tag Elimina el tag en la lista pero se mantiene en GitHub.*

Eliminar un tag en GitHub

git push origin:refs/tags/nombre-del-tag Comando para eliminar un tag y su referencia en el repositorio remoto, de esta forma nos aseguramos de borrarlo de la lista de tags de GitHub.

Multiples entornos de trabajo

Git Rebase: reorganizando el trabajo realizado

Solo se usa para unir cambios en local (nunca lo uses en ramas remotas).

Primero haz un git rebase primero al branch en la que hiciste cambios y quieres después unir y al final hacer git rebase estando dentro del branch que si vas a conservar.

git checkout rama3

git rebase

git checkout rama 2

git rebase

Git Stash: Guardar cambios en memoria y recuperarlos después

Cuando necesitamos regresar en el tiempo porque borramos alguna línea de código pero no queremos pasarnos a otra rama, porque nos daría un error ya que debemos pasar ese "mal cambio" que hicimos a stage, podemos usar git stash para regresar el cambio anterior que hicimos.

git stash es típico usarlo cuando necesitamos cambios que no merecen una rama o no merecen un rebase si no simplemente estamos probando algo y luego quieres volver rápidamente a tu versión anterior la cual es la correcta.

  • git stash crea el stash identificandolo con el nombre del último commit

  • git stash save "<mensaje identificador para el stash>" crear el stash identificandolo con el nombre que le indiquemos

  • git stash list lista elementos del stash

  • git stash pop sirve para recuperar los elementos

  • git stash branch <nombre_rama> crear una rama con el stash que guardamos usamos

  • git stash drop o' git stash drop stash@{<number_stash>} eliminar elementos del stash usamos

  • git stash clear eliminar todos los elementos del stash

Git Clean: limpiar tu proyecto de archivos no deseados

  • git clean --dry-run para saber qué archivos vamos a borrar

  • git clean -f para borrar todos los archivos listados (que no son carpetas)

  • git clean -df para borrar todos los archivos y carpetas

Los archivos que no son trackeados por el .gitignore no serán eliminados por el comando git clean

Git cherry-pick: traer commits viejos al head de un branch

Esté comando permite tomar uno o varios commits de otra rama sin tener que hacer un merge completo, para eso utilizamos el comando git cherry-pick <Id Commit> .

cherry-pick es una mala práctica porque significa que estamos reconstruyendo la historia, usa cherry-pick con sabiduría. Si no sabes lo que estás haciendo ten mucho cuidado.

Comandos de Git para casos de emergencia

Git Reset y Reflog: úsese en caso de emergencia

¿Qué pasa cuando todo se rompe y no sabemos qué está pasando? Con git reset <HashDelHEAD> nos regresamos al estado en que el proyecto funcionaba.

  • git reset --soft <HashDelHEAD> te mantiene lo que tengas en staging ahí

  • git reset --hard <HashDelHEAD> resetea absolutamente todo incluyendo lo que tengas en staging

    git reset es una mala práctica, no deberías usarlo en ningún momento; debe ser nuestro último recurso

  • git reflog te permite visualizar como has modificado la historia incluso si lo has borrado; git nunca olvida

Buscar en archivos y commits de Git con Grep y Log

A medida que nuestro proyecto se hace grande vamos a querer buscar ciertas cosas.

Por ejemplo: ¿cuántas veces en nuestro proyecto utilizamos la palabra color?

git grep lo usamos en los archivos

  • git grep <palabra_a_buscar> indica en donde se uso la palabra

  • git grep -n <palabra_a_buscar indica en que linea se usa la palabra

  • git grep -c <palabra_a_buscar> indica cuantas veces se uso la palabra

git log los usamos para los commits

  • git log -S "<palabra a buscar>" indica en donde se uso la palabra dentro de los mensajes de los commits

  • git log --all--oneline | grep "<palabra_a_buscar" muestra los commits en donde se encuentra la palabra

Comandos y recursos colaborativos en Git y GitHub

  • git shortlog para ver cuantos commits han hecho los miembros del equipo

  • git shortlog -sn muestra las personas que han hecho commits

  • git shortlog -sn --all muestra cuantos commits ha hecho cada miembro del equipo incluyendo los que han sido eliminados

  • git shortlog -sn --all --no-merge excluye los commits eliminados sin los merges

  • git config --global alias.stats "shortlog -sn --all --no-merges" configura un alias llamado stats

  • git blame -c <nombre_archivo> muestra quién ha hecho cambios en el archivo

  • git blame --help muestra la ayuda del comando que le indiques

  • git blame <nombre_archivo> -L 35, 60 muestra quién modifico las líneas que le indicamos

  • git branch -r muestra las ramas remotas

  • git branch -a muestra todas las ramas locales y remotas

Conclusión

Estos han sido algunos de los principales comandos que debes saber si quieres comenzar a usar git o si de pronto quisieras buscar una referencia rápida de para que sirve algún comando, claro que recomiendo siempre ir a la documentación. Espero te ayude está pequeña guía y nos leemos en la proxima.