Comandos básicos de Git

Este post incluye una lista de comandos básicos de Git, validos para cualquier implementación del famoso VCS. Se recomienda una revisión más exhaustiva de los mismos en caso de necesitarlo. Se puede encontrar más información en:

https://git-scm.com/

Algunos de los comandos más usados son los siguiente:

Git config

Configuración de la herramienta Git (i.e. identificación de usuario). Más info en https://git-scm.com/book/es/v1/Empezando-Configurando-Git-por-primera-vez

 Git SSH keys generation

Generación de clave pública para conexión a Git via SSH. Recomendable para no tener que introducir usuario y password con cada operación remota.

Clone the repo

Clona el repositorio remoto en el local y actualiza el workspace.

Update working copy

Descarga el contenido del repositorio remoto al local y actualiza el workspace (necesita la operación de clonación anterior para inicializar los repositorios locales).

Update local repository but not working copy

Actualiza repositorios locales con el contenido remoto pero no modifica la copia local.

Check working copy status

Revisa el estado del workspace en relación al contenido del repositorio local.

Check local branches

Lista las ramas del repositorio local.

Upload a modification

Añade una modificación al repositorio local y remoto.

1. Añade las modificaciones al stage

2. Comitea al repositorio local

3. Subo al repositorio remoto

Show commit history

Muestra el histórico de commits locales.

Show latest commit history

Muestra los datos del último commit local.

Show differences

Muestra diferencias entre:

  • Commits locales

  • Commits y ficheros

  • Ramas locales

  • Stagged changes (compara stagged files con committed files)

Undo working copy changes (checkout local repo HEAD)

Descarga ultima modificación de la rama actual para el fichero indicado, sobreescribiendo los cambios locales.

Reset a stage (reverse git add operation)

Resetea los cambios locales aplicados al fichero en cuestion, volviendo al estado comiteado en el repositorio local.

Revert a commit (revert git add and git commit operations)

Revierte un commit local, creando otro nuevo con los estados anteriores.

Stash changes

Almacena cambios en un stash para posterior uso.

Crea un stash

Lista stashes actuales

Muestra el contenido de un stash

Aplica el stash en la rama actual

  • Stash can be referred using indexes as: stash@{0,1,2,etc}: Use list to view them

Borra todos los stash locales

Y otros muchos comandos relacionados con los stashes que se pueden consultar aqui:

https://git-scm.com/docs/git-stash

Create a new branch (create if not exists)

Crea una nueva rama si no existe y cambia a ella.

Create a new branch, but do not change

Crea una nueva rama en el repo local pero no cambia a ella.

Checkout to a branch

Cambia a una rama ya existente.

Merge a branch

Mergea ramas y/o tags.

Mergea a la rama actual y aplica fast-forward, es decir, no creará ningún nuevo commit, simplemente apuntara la rama actual al commit mergeado, si es posible.

Mergea pero sin fast-forward, es decir, crear un nuevo commit para el merge (recomendable).

Delete a branch

Borra una rama del repositorio local.

Create a tag

Creación de tags.

Lista los tags existentes.

Crea el trag 1.0 con el contenido del HEAD, el commit o la rama indicados.

Crea un tag anotado (por defecto son light-weight).

Sube el tag al repositorio remoto.

Rebase

Es un mecanismo para realizar un merge, alternativo al anterior aunque más potente pero a su vez más sutil y peligroso.

El peligro viene a la hora de hacer rebase de ramas en el repositorio remoto. Esto puede generar confusión a la hora de crear nuevos commits asi como revertir cambios, etc. Por lo tanto, la recomendación es solo usar rebase en commits que se encuentren uicamente en el repositorio local.

Se basa en los siguiente: al hacer un rebase de una rama sobre otra, lo que se hace es aplicar los commits de la rama que se rebasa en la rama actual, en orden de aparición, respetando los commits de la rama original.

Por ejemplo, si disponemos de dos ramas, master y develop, con cambios diferentes, y ejecutamos lo siguiente:

Aplicamos los commits de la rama master directamente a la rama develop, en el orden en el que aparecen en la master.

También se puede hacer el rebase sin hacer el checkout de la rama que va a rebasar, haciendo:

Si las ramas no tienen el mismo origen, por ejemplo si se quiere rebasar una rama de feature con la rama de develop y ésta no surgió de la de develop si no de otra rama de feature, podemos hacer:

Se haría el rebase de feature02 sobre develop con los commits de feature02 pero sin los de feature01.

Rebase vs Merge

La idea del merge es que aparezcan reflejados en la historia del repositorio todos los cambios realizados en y entre las ramas, mientras que con el rebase se podria modificar esa historia para que aparezcan ciertos commits en ramas que no se hicieron. La filosofia es diferente, con merge se ve lo que paso explicitamente mientras que rebase permite modificar esa historia para que refleje los cambios que se deseen. Un uso recomendado seria aplicar rebase en el repositorio local para aquello cambios aun no compartidos con el objetivo de limpiar la historia local, antes de compartirlos.

Cherry-pick

Aplica cambios de commits concretos a la rama actual:

Se pueden escoger multiples commits. Cada commit creara un nuevo commit en la rama actual.

Search for text

Buscador de texto desde Git.

Herramienta gráfica sencilla