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