Tabla de Contenidos
Guía básica de Git y GitHub
Conceptos
- GIT: Aplicación para mantener un repositorio local.
- GitHub: Sistema de repositorios públicos pasado en Git.
Flujo de trabajo básico:
- Se modifican los archivos en el directorio de trabajo.
- Se trasladan las modificaciones al “stage”. Comando “add”.
- Se crea un “snapshot” del “stage” en un momento dado. Comando “commit”.
- Se actualiza el repositorio local desde el público. Comando “pull”.
- Se actualiza el repositorio público con el local. Comando “push”.
Documentación completa en: https://git-scm.com/book/es/v2
Comandos preliminares
git --version git help
Configuración inicial
git config --global user.name "juanma" git config --global user.email "juanma@smartastur.com"
Se puede acceder al fichero de configuración de git mediante
git config --global -e
Para establecer un editor de texto diferente a vi, por ejemplo, el joe:
git config --global core.editor "joe"
Iniciar un repositorio
Ir a la carpeta raíz del proyecto y teclear
git init
Comandos básicos
Muestra el estado del repositorio que nos informa de:
- Archivos pendientes de enviar al stage
- Archivos del stage modificados después del último snapshot
git status git status -s git status -s -b
Añade archivos del proyecto al stage.
git add . git add -A git add README.md git add carpeta
Crea un snapshot del stage
git commit -m "Mensaje"
Añadir al stage y al snapshot
git commit -am "Mensaje"
Devolver el proyecto completo al estado del último commit
git checkout -- .
Sólo parcialmente
git checkout -- README.md
Historial de commits
git log git log --oneline --decorate --all --graph
Sacar un archivo del stage. Su contenido no cambia en nuestra carpeta de trabajo, sólo que desaparecerá del stage o quedará con el contenido que tenía antes de añadirlo a él.
git reset * git reset README.md git reset carpeta
Crear un alias para comandos largos, por ejemplo, el log o el status
git config --global alias.lg "log --oneline --decorate --all --graph" git lg git config --global alias.s "status -s -b" git s
Mostrar las diferencias entre el proyecto y el stage. No dice nada al respecto de que pudieran haber cambios sin commit.
git diff
Para ver las diferencias entre el stage y el snapshot.
git diff -staged
Comandos para la gestión de commits
Volver a un snapshot del pasado
git reset --hard 860c6c2
donde 860c6c2 es el identificativo del snapshot que se puede obtener con
git reflog
Ramas o branches
La rama principal es la master o main, y es la que se utiliza como rama de producción.
Podemos crear ramas para, por ejemplo:
- Abrir una línea de desarrollo sin afectar a la rama principal, y cuando éste termine, se integren los cambios en el proyecto.
- Abrir una línea de desarrollo sobre un snapshot para dar servicio a una versión antigua.
Crear una rama
git branch nueva-rama
Lista las ramas creadas
git branch
Activar una rama
git checkout nueva-rama
Diferencias entre ramas
git diff nueva-rama master
Integrar rama en master
git checkout master git merge nueva-rama
Una vez integrada, conviene que sea borrada
git branch -d nueva-rama
Etiquetas
Son de utilidad para poner marcas de versión.
Poner etiqueta al snapshot actual o HEAD.
git tag -a v1.0.0 -m "Versión 1.0.0"
Poner etiqueta a un snpashot en particular
git tag -a v0.1.0 -m "Versión alfa" 345d7de
Mostrar información completa de la etiqueta
git show v1.0.0
Herramientas avanzadas
Stash
Salvar el directorio de trabajo y recupera el último snapshot.
git stash git stash save "Comentarios"
Recuperar el stash al directorio de trabajo. Conviene hacerlo después de haber hecho commit en el directorio de trabajo, a fin de resolver conflictos.
git stash apply git stash apply stash@{0}
Lista de stashs
git stash list
Borrar stash
git stash drop git stash drop stash@{0}
Recupera el último stash y lo borra
git stash pop
Borrar el contenido del stash
git stash clear
Rebase
Mueve los commits de cierta rama, en la línea del tiempo, hasta justo después del último commit de la rama de destino.
git rebase master
Así, si volvemos a la rama master y hacemos un merge, éste se realizará necesariamente sin conflictos
git checkout master git merge nueva-rama
GitHub
Iniciar un repositorio
Desde la web se crea el repositorio.
Para iniciar su sincronización con el directorio de trabajo:
git remote add origin git@github.com:JuanmaRoces/prueba.git git branch -M main git push -u origin main
De esta forma se suben todos los commits de la carpeta de trabajo al repositorio remoto en GitHub.
Comandos básicos
Para obtener los cambios del remoto al de trabajo
git pull
Para subir los cambios
git push
Para subir los tags
git push --tags
Para comenzar a trabajar en un repositorio remoto que no tenemos en nuestro ordenador
git clone git@github.com:JuanmaRoces/prueba.git git clone git@github.com:JuanmaRoces/prueba.git carpeta-destino