Comandos de Git

IMPORTANTE
  • Todos los comandos comienzan con git. Omitiré git en la definición de los comandos (e.g. git init por init)
  • HEAD: Rama actual, en la que te ubicas
  • Los parámetros con espacios hacen referencia a dos párametros (<nombre valor>) y con - es un único parámetro
  • Al mencionar rama hacer referencia a la rama indicada (como parámetro)
  • Cuando hago mención a url, me refiero tanto al enlace http como al enlace ssh
  • Se utilizará la palbra repo para referirse a repositorio

Configuración de Git

IMPORTANTE

Es necesario primero establecer un nombre de usuario y un email para poder hacer commits, esto con el objetivo de que quede registrado quién hizo dicho commit. Veáse Configuración Inicial de Git

  • git config:

    • --global: Permite acceder la configuración global (i.e, del computador)
    • --local: Permite acceder la configuración local (i.e del repo)
      • <atributo valor>: Crea o modifica el atributo con un valor
    • <--unset atributo>: Elimina el atributo

      • -l, --list: Muestra la configuración de Git
        • show: flags
      • alias.<nombre> <comando>: Establece un alias en git

Comandos Básicos

Creación

  • init: Crea un repo en la carpeta actual

  • add: Añade los archivos especificados a staging y a tracking

    • .: Implementa add a todos los archivos recursivamente de la carpeta actual.
  • commit: Guarda los archivos de staging en el repo

    • -a: Aplica add a todos los archivos tracked
    • -m "mensaje": Establece un mensaje al commit. Le puedes dar salto de línea al mensaje mientras no añadas las comillas de cierre
    • --amend -m "mensaje": Modifica el commit más reciente, agregando los cambios actuales de staging y permitiendo cambiar el mensaje del commit

Eliminación

  • rm:
    • --cached: Elimina los archivos de staging y tracking, es decir, remueve los archivos del repo
    • -f, --force: Elimina los archivos modificados de todas partes
    • r: Elimina recursivamente
    • --dry-run: Muestra lo que se eliminaría si se ejectara el rm sin esta flag

Status y Registros

  • status: Señala el HEAD y los archivos guadados en local y staging
  • show: Muestra los cambios de los archivos del último commit respecto a la versión previa

    • <archivo>: Aplica show al archivo especificado
    • --stat: Muestra los commits con sus respectivos cambios
  • log: Muestra los commits del HEAD

    • --oneline: Te los muestra en una línea
    • --graph: Te los muestra en un un gráfico
    • --all, -a: Muestra los commits de todos las ramas
  • diff: Muestra las diferencias entre los archivos modificados en local y staging

    • <hash-1 hash-2>: Muestra las diferencias entre dos commits
  • reflog: Te permite ver TODO EL HISTORIAL DE COMMITS , con el fin de poder rebobinar (reset) desde cualquier punto

Búsqueda

  • grip

    • <texto>: Busca entre los archivos del repo y señala los lugares en donde se utilizó dicho texto
    • -n: Muestra la línea donde se utilizó
    • -c: Muestra la cantidad de veces que fue utilizado
  • log -S <"texto">: Busca entre los commits y muestra aquellos en el que se usó dicho texto

Revertir y Regresar

ADVERTENCIA
  • Si deseas aplicar un commit --amend al commit más reciente de un repo alojado, ejecuta en seguida push --force-with-lease. No recomendado. Utilizar solo si se requiere hacer lo previamente descrito, cambiar el mensaje de algun commit.
  • Si se requiere deshacer commits de un repo hosteado, (e.g. por temas de privacidad) contacta a soporte técnico de GitHub, GitLab
  • restore: Restaura los archivos trackeados que han sido modificados y que no se encuentran en staging

    • staged: Restaura los archivos en staging al working
  • reset:

    • <hash>: Revierte los commits hasta el commit indicado, eliminando los commits posteriores a este, es decir, rebobinar
      • --hard: Elimina los archivos de staging y local
      • --soft: Preserva los archivos de staging (reset = reset --soft)
  • checkout

    • <hash>: Restaura los archivos (o archivo especificado) de un commit en staging sin borrar commits
    • <branch>: Cambio de rama
  • revert: Utilizado cuando el commit a revertir ya se encuentra alojado

    • <hash>: Crea un commit el cual revierte los commits hasta el commit indicado, sin eliminarlos

Stash

  • stash: Mueve las modificaciones de working y staging en un área temporal llamada stash permitiendo recuperarlas (justo en las áreas que se encontraban). Esto permite guardar cambios que no están listos para un commit
    • <nombre>:
    • list: Muestra los stash
    • pop: Restaura el stash en el HEAD
    • drop: Elimina el stash
    • branch <nombre>: Crea una rama y mueve el stash

Ramificaciones (Branches)

  • branch: muestra las ramas del repo (marca con un * el HEAD)

    • <nombre>: Se crea una rama con dicho nombre
    • switch: Te mueves a una rama
    • -m <nuevo-nombre>: Renombrar la rama
    • -r: Muestra las ramas alojadas en el servidor
    • -a: Muestra las ramas locales y del servidor
  • show-branch: Muestra lars ramas y su historia

    • --all: Muestra más datos

Cambio de Ramas

NOTA

Para cambiar de rama usamos checkout <nombre-de-rama> (se recomienda remplazar checkout por switch para evitar errores humanos)

Si tienes archivos en local o staging, tendrás que aplicarles un stash, un commit o, en su defecto, un rm para poder cambiar de rama

Merge

NOTA

En ocasiones se pueden generar conflictos al fusionar dos ramas. Veáse Conflictos en Merge

  • merge:
    • <rama>: Fusiona el HEAD con la rama
    • --abort: Aborta el merge

Alojamiento (Github, GitLab…)

NOTA

Si quieres aplicar un push, es importante siempre aplicar antes un pull antes de hacer cualquier commit

  • clone:
    • <url-del-repo>: Permite clonar repos públicos
    • <url-SSH-del-repo: Permite repos públicos y privados por medio de las llaves SSH
IMPORTANTE

El origen remoto es necesario para los comandos de alojamiento. Se suele nombrar origin al ser propietario o colaborador o, en su defecto, upstream

  • remote: Muestra los orígenes remotos

    • add <nombre url>: Agrega el origen remoto del directorio
    • remove <nombre>: Elimina el origen remoto
    • -v: Muestra los orígenes remotos con sus respectivos url’s
  • fetch:

    • <remote> <nombre-del-branch>: Respecto a la rama, descarga sus commits alojados en el servidor que no están localmente
  • pull:

    • <remote> <nombre-del-branch>: fetch + merge
  • push

    • <remote>:
      • <nombre-del-branch>: Sube al servidor los commits de la rama
      • --tags: Sube los tags
      • :refs/tags/<nombre-del-tag>: Una vez eliminado el tag localemente, lo elimina del servidor

Tags y versiones

  • tag: Muestra los tags del HEAD
    • -a <nombre-del-tag> -m <"mensaje"> <hash>: Crea un tag
    • d <nombre-del-tag>: Elimina un tag

Git Clean

  • clean:
    • --dry-run: Muestra los archivos que eliminaría si se ejecutara clean
    • -d: Elimina recursivamente no trackeados y no ignorados
    • -f: Fuerza la eliminación de archivos
      • -f: Fuerza la eliminación de archivos no trackeados de subrepertorios.
    • -x: Remueve archivos no trackeados e ignorados.
    • -X: Remueve solo los archivos no trackeados

Cherry Pick

  • cherry-pick:
    • hash: Trae todos los cambios de cierto commit de una rama al HEAD

Git Submodule

Un submódulo es un repositorio ubicado dentro de otro repositorio. Al utilizar un submódulo en vez de trackear directamente los subrepositorios, permites que un repositorio principal contenga y gestione el subrepositorio, el submódulo.

  • submodule:
    • add <url-del-repo>: Agrega un submódulo con el nombre del repo en la carpeta actual
      • <ruta>: Agregra el submódulo en la ruta especificado. La última carpeta tiene que ser inexistente o vacia
      • -f: Fuerza la adición del submódulo. Útil para añadir submódulo de repos existentes en el repo principal. Si es necesario aplica un git rm --cached del subrepo a agregar como submódulo.
    • init: Inicializa los submódulos. Necesario cuando recién se clonó el repo principal y este ya contenía sumódulos
    • update: Actualiza los sumódulos a la versión más reciente guardada en el repo principal
      • --remote: Actualiza cada submódulo a su versión más reciente de la rama establecida el .gitmodules, la configuración del submódulo

Referencias




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • Introducción a los Comandos
  • Interfaces de Usuario en los Sistemas Operativos
  • Introducción a Linux
  • Introducción a los Sistemas Operativos
  • Vim CheatSet
  • Sistemas Numéricos