Git
- Acerca de Git
- Comandos básicos
- Crear un repositorio nuevo (git init)
- Descargar una copia de un repositorio existente (git clone)
- Descargar últimos cambios de un repositorio (git pull)
- Comprobar estado de repositorio (git status)
- Comprobar estado de repositorio por línea (git diff)
- Indicar qué cambios se subirán localmente (git add)
- Subir los cambios localmente (git commit)
- Subir los cambios locales al repositorio remoto (git push)
- Trabajar con ramas (branches)
- Creación de ramas
- Borrar ramas
- Actualizar y fusionar
- Etiquetas
- Enlazar repositorio local con remoto
- Comandos avanzados
- Cheatsheet
- Git Log Visualization
- Git prompt helpers
- Páginas similares y relacionadas
Acerca de Git
Git es un sistema de control de versiones distribuido creado por Linus Torvalds en 2005 para el desarrollo del kernel de Linux.
Comandos básicos
Crear un repositorio nuevo (git init)
Habitualmente creamos repositorios nuevos directamente en GitHub (interfaz web), con lo cual nos saltaríamos este paso, pero también se pueden crear localmente. Para crear un repositorio localmente, desde una carpeta nueva, ejecuta el comando:
git init
Descargar una copia de un repositorio existente (git clone)
Para descargar una copia de un repositorio existente (creado con GitHub o manualmente), se utiliza el comando git clone
. Para el repositorio tutoriales
de la organización asrob-uc3m
en GitHub, el comando sería:
git clone https://github.com/asrob-uc3m/tutoriales.git
Consideraciones:
- Debe utilizarse con la raíz del repositorio.
- El sufijo
.git
es opcional. - Existen otros protocolos además de
https:
, incluyendo el propiogit:
.
Descargar últimos cambios de un repositorio (git pull)
Si nos hemos descargado previamente la copia de un repositorio (git clone), es posible que en un momento dado no tengamos los últimos cambios remotos. Esto se soluciona mediante:
git pull
Es recomendable hacerlo siempre antes de cualquiera de los próximos pasos.
Comprobar estado de repositorio (git status)
git status
- Los ficheros con cambios y los que no estén agregados al proyecto aparecerán en rojo.
- Los ficheros con cambios que se subirán localmente aparecerán en verde.
Comprobar estado de repositorio por línea (git diff)
Se pueden ver los cambios con una granularidad línea-a-línea mediante:
git diff
Por defecto muestra los cambios en todos los ficheros modificados (pero no los nuevos).
Indicar qué cambios se subirán localmente (git add)
Puedes indicar qué cambios se subirán usando git add
. Existe un modo interactivo (git add -i
) que permite seleccionar por línea, pero lo más habitual es por fichero. Por ejemplo, para indicar que se subirá localmente el fichero file.md
(sea nuevo o modificado):
git add file.md
Este fichero pasará a verde en git status
y se dice que está "staged". Nótese que todavía no se ha subido localmente.
Git hace distinción entre ficheros nuevos y modificados. Existe un atajo para indicar que se suban localmente todos los ficheros con modificaciones, que no afecta a los nuevos (que deberán indicarse explícitamente):
git add -u
Subir los cambios localmente (git commit)
Se pueden subir los cambios localmente (los ficheros "staged", marcados en verde) con el comando:
git commit -m"Mensaje del commit"
Esto es un método abreviado. git commit
a secas nos abre un editor de texto que permite introducir descripciones más completas.
Subir los cambios locales al repositorio remoto (git push)
Para enviar estos cambios a tu repositorio remoto ejecuta:
git push
Aquí entran conceptos más avanzados de ramas (branches), que incluso depende de tu configuración local. Para un repositorio sencillo con una única rama master
, si el comando previo da problemas, el comando git push origin master
te puede salvar.
Trabajar con ramas (branches)
Creación de ramas
Las ramas son utilizadas para desarrollar funcionalidades aisladas unas de otras. La rama master es la rama "por defecto" cuando creas un repositorio. Crea nuevas ramas durante el desarrollo y fusiónalas a la rama principal cuando termines.
Crea una nueva rama llamada "rama_b" y cámbiate a ella usando.
git checkout -b rama_b
Vuelve a la rama principal.
git checkout master
Borrar ramas
Borra la rama:
git branch -d rama_b
Una rama nueva no estará disponible para los demás a menos que subas (push) la rama a tu repositorio remoto.
git push origin <branch>
Actualizar y fusionar
Actualiza y fusiona:
Para actualizar tu repositorio local al commit más nuevo, ejecuta:
git pull
En tu directorio de trabajo para bajar y fusionar los cambios remotos. Para fusionar otra rama a tu rama activa (por ejemplo master), utiliza:
git merge <branch>
En ambos casos git intentará fusionar automáticamente los cambios. Desafortunadamente, no siempre será posible y se podrán producir conflictos. Tú eres responsable de fusionar esos conflictos manualmente al editar los archivos mostrados por git. Después de modificarlos, necesitas marcarlos como fusionados con.
git add <filename>
Antes de fusionar los cambios, puedes revisarlos usando
git diff <source_branch> <target_branch>
Etiquetas
Se recomienda crear etiquetas para cada nueva versión publicada de un software. Puedes crear una nueva etiqueta llamada 1.0.0 ejecutando:
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff se refiere a los 10 caracteres del commit id al cual quieres referirte con tu etiqueta. Puedes obtener el commit id con
git log
También puedes usar menos caracteres que el commit id, pero debe ser un valor único. Reemplaza cambios locales.
En caso de que hagas algo mal puedes reemplazar cambios locales usando el comando:
git checkout -- <filename>
Este comando reemplaza los cambios en tu directorio de trabajo con el último contenido de HEAD. Los cambios que ya han sido agregados al Index, así como también los nuevos archivos, se mantendrán sin cambio.
Por otro lado, si quieres deshacer todos los cambios locales y commits, puedes traer la última versión del servidor y apuntar a tu copia local principal de esta forma
git fetch origin
git reset --hard origin/master
Enlazar repositorio local con uno remoto
Si no se ha clonado un repositorio ya existente y quieres conectar tu repositorio local a un repositorio remoto, usa:
git remote add origin <server>
Ahora podrás subir tus cambios al repositorio remoto seleccionado.
Comandos avanzados
- cherry-pick
- rebase
Cheatsheet
- Almacenar contraseña durante un tiempo:
git config credential.helper cache
- Deshacer los cambios de un fichero (antes de commit):
git checkout -- nombre-fichero
- Corregir el texto del último commit (antes de push, aunque se podría forzar):
git commit --amend
- Deshacer el útimo commit entero (antes de push, aunque se podría forzar):
git reset HEAD~1
- Ver diferencias por palabras en lugar de líneas (probado también con
git show
):git diff --word-diff=color --word-diff-regex=.
- Crear alias para comandos personalizados (por ejemplo, para escribir solo
git wd
en lugar del comando anterior):git config --global alias.wd 'diff --word-diff=color --word-diff-regex=.'
Git Log Visualization
gitk
gitg
git log --graph
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
(thanks https://coderwall.com/p/euwpig/a-better-git-log)
Git prompt helpers
Pequeños scripts que pueden hacer que en el prompt de tu consola estilo bash se vea información de git.
- Oficial: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
- Windows: https://desktop.github.com/
- Short (hay muchos): https://github.com/motine/gitprompt