---
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.