---
# System prepended metadata

title: GIT
tags: [apuntes]

---

---
title: GIT
tags: apuntes
description: Apuntes GIT.
--- 

# GIT

Git sirve para guardar el historial de versiones, y controlarlas, de esta manera no perdemos datos nunca.

Tambien sirve para trabajar de manera sincronizada o paralela con otros desarrolladores en el mismo projecto.

## Instalación

Para instalarlo en la terminal, podemos descargarlo de https://git-scm.com en caso de windows.

En linux, con el comando `sudo apt install git`

## Usuario

Para informar de quienes somos, para saber quien está haciendo los cambios.

`git config --global user.name "Adrián García González"`
`git config --global user.email "garcia.gonzalez.adrian204@gmail.com"`

## Iniciar repositorio en una carpeta

Te colocas en la ruta deseada y usas el siguiente comando:
`git init`

Esto iniciará un repositorio vacio en la carpeta.

:::warning
Si te has equivocado de carpeta y queres borrar el repositorio, tienes que borrar la carpeta .git que se ha generado. Comando: `rm -rf .git`
:::

## Ignorar ciertos archivos

Creamos el archivo `.gitingore`.

Dentro ponemos el nombre del archivo, o wildcards separados por saltos de linea.

`.gitignore`
```
noloincluyas.php
*.txt
directorioprivado/*
```

El `.gitignore` de arriba, evita que se suban esos archivos.

## Niveles

Git trabaja en 3 niveles.

* Working directory
* Staging area
* Repository

### Working Directory

Es el repositorio en el que estás, trabajando actualmente. De aquí lo subes a la staging area, `git add archivo` .

### Staging area.

Aquí se van subiendo cambios, como un buffer, y cuando hay suficientes cambios para generar una nueva versión, o cuando lo deseemos, lo subimos al repositorio como una versión nueva, `git commit`.

### Repository

En el repositorio se encuentran todas las versiones commiteadas, y en teoria, funcionales.

## Comandos

### `git status`

Te permite ver el estado de los ficheros cambiados. Que todavia hay que añadir y/o commitear.

### `git add archivo`

Sube el archivo al staging area.

#### `git add .`

Sube todos los archivos al staging area.

### `git reset HEAD archivo`

Para quitar un archivo del staging area, cancelar el `git add archivo`.

:::info
Puede que tengas que quitar el "HEAD".
:::

#### `git reset HEAD .`

Quita todos los archivos del staging area.

### `git rm --cached archivo`

Para quitar un archivo del staging area, cancelar el `git add archivo`.

:::danger
También deja de trakearlo. ¿Puede ignorarlo incluso en el working directory?
:::

### `git commit`

Para subir del staging area al repositorio.

Para ahorrarte el editor, completa el comando, `git commit -m "Nuevo archivo hola.txt, te saluda!"`.

#### `git commit --amend -m "new msg"`

Si te habias olvidado de algun archivo, subelo al staging area, y luego ejecutas este comando para añadirlo al último commit. El mensaje reemplazara al del anterior commit.

### `git log`

Lista todas las versiones del repositorio.

#### `git log --stat`

Añade datos a la lista.

### `git diff`

Permite ver la diferencia entre repositorios.

### `git checkout archivo`

Sirve para restaurar el archivo a la ultima versión del staging area o repositorio.

### `git reset hashcode`

Te permite retroceder a una version en concreto, mediante el código hash de esa version/commit.

### `git reflog`

Permite ver el historial de cambios incluyendo las restauraciones a otros commit. Y puedes restaurar commits que no están en el log normal.

Solo puedes ver las de los últimos 30 dias, a los 30 dias caducan!

### `git branch`

Te dice en que rama estás.

#### `git branch nueva`

Creas una rama nueva, a partir del último commit de la rama en la que estés.

### `git checkout rama`

Te mueves a la rama especificada.

### `git merge nuevarama`

Metes nuevarama en la rama que estés. Nomalmente, te metes a la master y ejecutas el comando a la rama que quieras para traerte los cambios.

La nuevarama no se borra, tienes que borrarla manualmente si no le vas a dar uso una vez la mezcles.

### `git branch -d nuevarama`

Borra la rama nuevarama.

### `git branch -m nuevonombre`

Cambia el nombre de la rama actual a nuevonombre.

### `git branch -m viejonombre nuevonombre`

Cambia el nombre de la rama viejonombre a nuevonombre.

### `git clone url`

Te descarga el repositorio de la url dada, creando una carpeta con el nombre del repositorio en la carpeta actual.

#### `git clone url .`

Para descargar el contenido en la carpeta acutal (tiene que estar vacia) añadimos "." al final, separado por un espacio.

### `git remote add origin url`

Añade un repositorio remoto, con el alias origin.

### `git push -u origin main`

Sube los archivos locales de tu rama main a la rama main del repositorio remoto origin.

#### `git push origin --force`

Para forzar la subida, ignorando posibles daños.

### `git pull origin main`

Para descargar la rama main del repositorio remoto origin.

