[ES] Git. Guía desde cero.
Tags: git, tutorial, productivity, spanish
Published: 2022-11-06 23:45:00

En este artículo veremos desde la creación de un nuevo repositorio hasta la publicación de este en un servidor y comandos que uso a diario que pueden resultar útiles.

Será necesario tener Git instalado en nuestro equipo.

## 1. ¿Qué es Git?

Git es el sistema de control de versiones más usado actualmente, se ha convertido en el estándar de facto para la mayoría de las empresas, por eso es importante saber cómo manejarlo eficientemente.

Un proyecto versionado en Git, está compuesto por un mínimo de cuatro *áreas*:
- **_Working Area_**: comprende los ficheros que han sido creados, modificados o borrados.

- **_Stash_**: comprende los ficheros que han sido modificados y hemos reservado para hacer algo con ellos en un futuro.

- **_Staging Area_**: comprende los ficheros que queremos que sean añadidos al repositorio.

- **_Local Repository_**: Es el historico de modificaciones de nuesto repositorio, esta compuesto por diferentes **ramas** que contienen todos los cambios que se han realizado sobre un proyecto.

> Las ramas son copias del proyecto que parten de la misma base de código, utilizadas para implementar cambios a nuestro repositorio.

Adicionalmente, podemos tener un área más, llamada **_Remote repository_**, que no es más que una copia de nuestra área **_Local Repository_**, localizada en uno o varios servidores, ya sean [GitHub](https://github.com), [GitLab](https://gitlab.com) o [BitBucket](https://bitbucket.org) entre otros...

> Es posible tener más de un _Remote Repository_ para un _Local Repository_.

## 2. Configuración inicial.

Lo primero que tenemos que hacer tras instalar Git es configurar nuestras credenciales, para esto vamos a hacer uso de estos tres comandos.

```Bash
$ git config --global user.name "tu_nombre_de_usuario"
$ git config --global user.email "tu_email"
$ git config --global core.editor "tu_editor_de_texto"
```
> El editor de texto por defecto es Vim.

## 3. Iniciar/Descargar un repositorio.
Para iniciar un repositorio solo tenemos que ejecutar el comando `git init` dentro del directorio de nuestro proyecto.

Para descargar(clonar) un repositorio ya existente, debemos ejecutar el comando `git clone <url_repositorio>`.

## 4. Comandos comunes.

> La mayoría de los comandos contienen parámetros extra que por simplicidad no serán explicados en este artículo. Serán explicados los más comunes para un uso cotidiano.


### 4.1. Ficheros.

- **`git add <fichero>`**: nos permite mover ficheros desde _Working directory_ a _Staging Area_.

- **`git stash`**: nos permite reservar los cambios de nuestro _Staging Área_ para ser usados posteriormente.

- **`git stash list`** : nos permite listar los cambios que hemos reservado con anterioridad.

- **`git stash pop`**: nos permite recuperar el último cambio que hemos guardado.

- **`git stash pop <índice_stash>`**: nos permite recuperar el cambio con índice <índice_stash>.

- **`git stash drop`** : nos permite borrar un cambio que hemos reservado.

- **`git commit -m "mensaje"`**: nos permite mover ficheros desde _Staging Area_ a _Local Repository_ añadiendo un mensaje.

- **`git diff <nombre_fichero>`**:muestra la diferencia sobre un fichero con respecto a su anterior versión.

- **`git reset`**: nos permite mover todos los ficheros desde _Staging Area_ a _Working Directory_.

- **`git reset <nombre_fichero>`**: nos permite mover un fichero desde _Staging Area_ a _Working Directory_.

- **`git reset --soft HEAD~<numero_de_commits>`**: nos permite deshacer los cambios de nuestro _Local Repository_ x `commits` hacia atrás sin perder esas modificaciones, donde x=\<numero_de_commits\>.

- **`git restore <nombre_fichero>`**: nos permite deshacer los cambios que se han realizado sobre un fichero.

### 4.2. Ramas.

- **`git branch`**: lista todas las ramas de nuestro _Local Repository_ y en cuál estamos actualmente.

- **`git branch -d`**: elimina una rama que ya ha sido fusionada con otra.

- **`git branch -D`**:fuerza la eliminación de una rama, haya sido ya fusionada o no.

- **`git switch <nombre_rama_destino>`**: nos permite cambiarnos a la rama destino.

- **`git switch -c <nombre_rama>`**: crea una nueva rama a partir de la rama en la que nos encontramos actualmente y nos movemos a esta.

- **`git checkout <id_commit>`**: nos permite movernos hacia un commit existente.

- **`git merge <rama_a_fusionar>`**: fusiona una rama con nuestra rama actual.

### 4.3. Repositorio Remoto.

- **`git remote add <nombre_vinculo> <url_repositorio>`**: vincula nuestro _Local Repository_ con un _Remote Repository_.

- **`git remote remove <nombre_vinculo>`**: borra un vínculo con un _Remote Repository_.

- **`git remote -v`**:lista con que _Remote Repositories_ está vinculado nuestro _Local Repository_.

- **`git push <nombre_vínculo> <rama_remota>`**: nos permite subir los commits de nuestro _Local Repository_ a un _Remote 
Repository_.

- **`git push -f <nombre_vínculo> <rama_remota>`**: nos permite forzar la subida de los commits de nuestro _Local Repository_ a un _Remote Repository_.

- **`git fetch`**: descarga los metadatos de un _Remote Repository_ a un _Local Repository_.

- **`git pull`**: es una combinación de `git fetch` y `git merge`, descarga los cambios y metadatos de un _Remote Repository_ y los fusiona con nuestra rama actual en _Local Repository_.

### 4.4. Genéricos.

- **`git status`**: muestra el estado actual de nuestro repositorio.


- **`git log`**: lista los cambios que se han realizado en nuestro _Local Repository_.

***
Si conoces algún comando útil y crees que debería estar en esta lista, no dudes en comentarlo!