<div class="page">
<div class="cover text-center">
<img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo">
# Resum comandes de Git
<div class="text-end fit-content ms-auto my-3 mt-auto pt-3">
<p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p>
<p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p>
<p><strong>Curs:</strong> 2024/2025</p>
</div>
<div>
<p class="fw-bold mb-0">Llicència: BY-NC-SA</p>
<p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p>
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank">
<img class="mx-auto" src="/itb/images/license.png" alt="Licence"/>
</a>
</div><!--license-->
</div><!--cover-->
</div><!--page-->
{:toc}
## Introducció
En aquest material es recopila un resum dels fitxers, comandes i opcions més
utilitzats de Git.
## Fitxers
- `~/.gitconfig`: Fitxer de configuració global del teu usuari. S'emmagatzema en la carpeta d'usuari.
Totes les configuracions fetes amb `git config --global` s'emmagatzemen en aquest fitxer.
També permet definir __alies__.
Exemple de `.gitconfig` amb alies que permeten consultar el `log` d'una manera més visual.
```ini
[user]
name = <Your Name>
email = <your email>
[alias]
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)'
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
lg = !"git lg1"
lga = !"git lg --all"
```
- `.git/`: Directori que conté el _Repostori Local_. Aquest carpeta està present en tots els repositoris de Git.
- `.gitignore`: Fitxer que especifica quins fitxers no volem que Git considere, és a dir, que Git ha d'ignorar.
## Comandes bàsiques
- `git init`: Inicialitza un repositori buit en la carpeta on estigues situat.
- `git clone <url> <destination>`: Clona un repositori remot, especificat per una `url` al directori `destination`.
Si no s'especifica cap directori, es clonarà en un directori nou amb el nom del repositori.
- `git status`: Mostra l'estat actual del repositori, com els canvis en el _Directori de treball_ o el _Staging Area_.
- `git add <files or directory>`: Afegeix els fitxers o directoris especificats al _Staging Area_.
- `git commit`: Crea un _commit_ que fa efectius els canvis del _Staging Area_. Per defecte, obri un editor per especificar el missatge del _commit_.
- Opció `-m <missatge>`: Permet especificar un missatge en una línia d'una manera ràpida, sense necessitat d'un editor de text.
- `git restore <files or directory>`: Descarta els canvis dels fitxers o directoris especificats del _Directori de Treball_. __Una vegada descartats NO es poden tornar a recuperar__.
- `git restore --staged <files or directory>`: Descarta els canvis dels fitxers o directoris especificats del _Staging Area_ i els torna al _Directori de Treball_.
- `git log`: Permet consultar els commits realitzats en la branca actual.
- `git diff <files or directory>`: Permet mostrar els canvis realitzats en el _Direcotri de Treball_. Es permet especificar el fitxer o directori dels qual es vol consultar els canvis.
Si no s'especifica, es mostren tots els canvis.
- Opció `--staged`: Permet mostrar els canvis realitzats en el _Staging Area_.
- `git diff <ref>`: Permet mostrar els canvis en una referència, com un _commit_ o una _etiqueta_.
## Sincronització amb el _Repositori Remot_
- `git push`: Publica i sincronitza els canvis realitzas en el _Repositori Local_ al _Repositori Remot_.
- Opció `--tags`: Publica totes les etiquetes al _Repositori Remot_.
- `git pull`: Incorpora i actualitza els canvis del _Repositori Remot_ al _Repositori Local_. Aquesta comanda pot donar lloc a conflictes.
- `git fetch`: Obté els canvis del _Repositori Remot_ al _Repositori Local_, però no actualitza els fitxers.
## Treballar en branques
### Branques locals
- `git branch`: Mostra les branques existents al repositori.
- `git branch <branch name>`: Crea una branca nova amb el nom especificat.
- `git branch -d <branch name>`: Elimina la branca amb el nom especificat.
::: info
En aquest context, `checkout` i `switch` són equivalents.
:::
- `git checkout <ref>`: Mou el `HEAD` (estat actual del repositori) a la referència especificada. La referència pot ser una branca, una etiqueta o un _commit hash_.
- `git checkout -b <branch name>`: Crea una branca nova amb el nom especificat i mou el `HEAD` a aquesta branca.
- `git switch -c <branch name>`: Crea una branca nova amb el nom especificat i mou el `HEAD` a aquesta branca.
### Branques remotes
- `git push {-u | --set-upstream} <remote> <branch_name>`: Publica la branca actual i estableix el nom de la branca remota.
- `git push -d <remote> <branch_name>`: Elimina la branca remota amb el nom especificat.
## Fusionar branques
- `git merge <branch name>`: Fusiona i incorpora els canvis de la branca especificada a la branca actual (on està situal el `HEAD`).
- Si la fusió és _fast forward_, es produirà sense necessitat de cap acció més.
- Si la fusió no és _fast forward_, caldrà especificar el missatge del _merge commit_.
- Si hi ha conflictes, caldrà resoldre'ls.
- Opció `--abort`: Aborta la fusió que s'està produint.
- `git rebase <branch name>`: Mou la base de la branca actual (`HEAD`) a la branca especificada.
- Si hi ha conflictes, caldrà resoldre'ls.
- Opció `--continue`: Continua amb el canvi de base una vegada s'hagen resolt els conflictes.
- Opció `--abort`: Aborta el canvi de base que s'està produint.
## Etiquetes
- `git tag`: Mostra les etiquetes existent al repositori.
- `git tag <tag name>`: Crea una etiqueta _lleugera_ nova amb el nom especificat.
- `git tag -a <tag name>`: Crea una etiqueta _anotada_ nova amb el nom especificat. Cal indicar un missatge.
- Opció `-m`: Permet especificar un missatge en una línia d'una manera ràpida, sense necessitat d'un editor de text.
- `git tag -d <tag name>`: Elimina l'etiqueta amb el nom especificat.
Aquest lloc web utilitza galetes per millorar l'experiència de l'usuari