====== GIT ======
===== Conceptos =====
El **working tree** es el directorio de trabajo, donde se crea un repositorio.
Un **commit** es la actualización del registro local en la máquina; los commits se identifican por un hash. A un commit se le puede asignar una **tag** que es un alias.
Un **push** es la actualización del repositorio remoto a partir de los cambios realizados por el commit.
{{:code:git:mgav9.png?direct&400|}}
Una **branch** es una copia del master desde la cual trabajar. Para fusionar dos branches se hace un **merge**.
Un repositorio **remote** consiste en un repositorio que no está en máquina local.
**origin** es una keyword que indica el repositorio inicial (donde se recogieron los archivos, donde se empezó a guardar...).
===== Uso =====
==== Clone ====
Obtener un repositorio externo:
$ git clone
Obtener un repositorio usando con otro nombre en local:
$ git clone git://github.com/schacon/grit.git otro_nombre
Obtener una branch concreta de un repsitorio:
$ git clone git://github.com/schacon/grit.git -b dev
==== Ficheros ====
=== Borrado ===
Borrar un fichero tanto local como en repositorio:
$ git rm filename.ext
Borrar un fichero sólo del repositorio:
$ git rm --cached mylogfile.log
Borrar un directorio entero en el repositorio pero no en local:
$ git rm -r --cached folderName
==== Commits ====
Indicar el commit con el comentario directamente:
$ git commit -m "the 1st commit"
Realizar un commit de cambios actualizando automáticamente los ficheros que ya existen en el working tree pero sin añadir nuevos:
$ git commit -a -m "commit message"
==== Push ====
Para subir unos cambios registrados en local al servidor:
$ git push repo_name branch_name
==== Tags ====
Para identificar un commit sin tener que referirse a él por el hash haremos (siendo ''3720b35'' el hash):
$ git tag working 3720b35
... O podremos taggear el último:
$ git tag my_identifier
Muchas veces se hacen tags por versión:
$ git tag 1.0.3
Podríamos haccer:
$ git diff working..broken
Podemos conocer una lista de tags existentes
$ git tag
O eliminar una tag concreta:
$ git tag -d my_tag
==== Branches ====
Antes de hacer una branch actualiza el master (pull).
Crear una branch:
$ git branch my_branch
Subir la branch a un repositorio externo:
$ git push origin my_branch
Cambiar de branch:
$ git checkout my_branch
Saber qué branch es la tuya actual (la que tiene estrella):
$ git branch
También podemos:
* ''git branch -a'', ver todas las branches, las remotas también.
* ''git branch -v'', ver más información sobre las branches.
Eliminar una branch localmente:
$ git branch -d the_local_branch
Eliminar una branch remota:
$ git push origin --delete the_remote_branch
Eliminar una branch remota (alternativa):
$ git push origin :the_remote_branch
Unir tu branch al repositorio:
$ git merge master
Eliminar una branch del working tree:
$ git branch -d my_branch
==== Merge de branches ====
=== Forzar\sobreescribir ===
Cuando quieras forzar un merge de una branch te pondrás en la destino (''checkout'') y harás:
$ git merge -X
Donde la opción puede ser ''ours'' o ''theirs'' según la versión que se prefiera en caso de conflicto (ours para la versión de la branch actual y theirs para la de la que quieres hacer merge).
===== Versiones =====
Para volver temporalmente a una versión anterior
$ git checkout
===== Workflows =====
==== El tuyo ====
=== GitHub ===
Obtener un repsitorio:
$ git clone https://github.com/ElectronicStars/Hindbrain
Actualizar el repositorio:
$ git add .
$ git commit -a
$ git push
Subir a una branch que no existe en GitHub o que es distinta a la master:
$ git push origin my_branch
===== Administración de repositorios =====
===== Git Avanzado =====
===== Notas =====
==== Recursos ====
=== Tutoriales ===
* [[http://gitimmersion.com/|Git Immersion]]