DIARIO DE APRENDIZAJE

Tema 1 - GIT

Una Introducción a GIT

GIT es un servicio estándar de comunicación y gestión de información entre local y remoto, cuyo objetivo es poder llevar un control de distintas versiones presentes en un proyecto, permitiendo recuperarlas de manera específica.

Podemos encontrarlo integrado en la mayoría de IDE's como pueden ser Visual Studio Code, WebStorm, PhpStorm, Docker, etc.

Áreas de trabajo

  • Directorio de trabajo
    • En él encontramos todos los archivos de nuestro proyecto.
  • Staging
    • Área de preparación, el archivo aún no está guardado definitivamente.
  • Repositorio local
    • Es el repositorio que encontramos localizado en nuestro ordenador.
  • Repositorio remoto
    • Repositorio centralizado, varios desarrolladores pueden trabajar sobre él.

Estado de ficheros

  • Untracked
    • El fichero no está bajo el control de versiones. No está en el repositorio.
  • Unmodified
    • El fichero está en el repositorio pero no ha sido modificado desde su última versión confirmada.
  • Modified
    • Los datos/ficheros se han modificado, pero todavía no los has confirmado a tu base de datos.
  • Staged
    • Se ha marcado un archivo modificado en su versión actual para que vaya en tu próxima confirmación.
  • Commited
    • Los datos/ficheros están almacenados de manera segura en tu base de datos local.

Comandos

Inicio de un repositorio local

Para iniciar el repositorio local, utilizamos el comando git init.

git init /* Inicia el repositorio local */

Renombrar la rama principal

La rama master local pasa a llamarse main, como la de por defecto de GITHub, mediante git branch -m main.

git branch -m main /* Cambia el nombre de la rama principal */

Añadir archivos al área de Staging

Agregamos archivos mediante git add.

git add <nombre_archivo> /* Para agregar un archivo en específico */

git add . /* Para agregar todos los archivos */

Comandos de estado

Para consultar el estado de nuestros archivos utilizamos git status o git log --oneline.

git status /* Muestra una lista de archivos junto a su estado */

git log --oneline /* Muestra un histórico de los commits resumido */

Comandos de ayuda

En caso de necesitar ayuda sobre algún comando, podemos usar git help o git --help.

git help <comando> /* Muestra la ayuda del comando indicado */

git <comando> --help /* Alternativa al comando anterior */

Primer Commit

Para guardar cambios realizados en la zona de Staging, utilizamos git commit -m seguido de un comentario.

git commit -m "Primer Commit" /* Realiza el commit del archivo elegido */

Subir repositorio local al repositorio remoto

Para subir los cambios al repositorio remoto, utilizamos git push.

git push origin main/* Sube los cambios al repositorio remoto */

Clonar un repositorio

Para copiar un repositorio remoto en local, utilizamos git clone.

git clone <repositorioRemoto><directorioLocal>/* Clona el repositorio remoto */

Fusionar los cambios del repositorio remoto en el directorio local

Para descargar un repositorio remoto y fusionar los cambios en el directorio local, utilizamos git pull.

git pull <servidorRemoto>/* Fusiona el repositorio remoto en el directorio de trabajo local */

git pull <servidorRemoto><nombreRama>/* Bajamos una rama específica del servidor remoto */

Crear un repositorio remoto

Para crear un puntero al repositorio remoto utilizamos git remote add.

git remote add <nombreRepositorio><URL>/* Crea un repositorio remoto */

Actualizar el repositorio local

Para actualizarlo con los cambios de un repositorio remoto sin fusionarlos en tu rama actual, utilizamos git fetch.

git fetch <servidorRemoto>/* Recupera los datos del repositorio remoto que no estén en local */

Untrackear los archivos seleccionados

Para devolver los archivos al estado de Untracked, utilizamos git reset HEAD.

git reset HEAD <nombreArchivo>/* Devuelve los archivos al estado de Untracked */

Eliminar los archivos seleccionados

Para eliminar los archivos seleccionados, utilizamos git clean.

git reset clean -n/* Indica los ficheros a eliminar */

git clean -f/* Elimina los ficheros */

Volver a un commit en específico

En caso de querer volver al estado de un commit específico, utilizamos git reset.

git reset --soft HEAD^/* Va al commit anterior borrando el actual y deja los archivos en added */

git reset --mixed HEAD^/* Va al commit anterior borrando el actual y deja los archivos en untracked */

git reset --hard HEAD^/* Va al commit anterior borrando el actual y elimina los archivos */

git revert <ID_commit>/* Revierte un commit específico creando uno nuevo deshaciendo los cambios */

Crear etiquetas

En caso de querer crear etiquetas que indiquen información útil git tag.

git tag -a <nombre> -m "Comentario"/* Crea una etiqueta con nombre y mensaje descriptivo */

git tag -a <nombre><ID_commit> -m "Comentario"/* Crea una etiqueta anotada a un commit */

git push origin <nombreTag>/* Sube una etiqueta específica al repositorio remoto */

Corrección de errores

Para corregir distintos errores que puedan surgir a la hora hacer commit, empleamos git --amend.

git commit --amend -m "Texto"/* Permite modificar el mensaje del último commit */

git revert <nombreRama>~<numeroCommit><nombreRama>~<numeroCommit>/* Revierte uno o más commits en una rama especificando la posición de los commits que quieres deshacer */

Trabajando con ramas

Bifurcaciones de nuevas versiones, con respecto a la rama máster

Para listar, crear o borrar ramas, usamos git branch o git show.

git branch /* Lista las ramas existentes */

git branch <nombreRama> /* Crea una nueva rama */

git branch -d <nombreRama> /* Elimina una rama existente */

git branch -m <nombreAntiguo><nombreNuevo>/* Cambia el nombre de una rama */

git show -m /* Permite ver los detalles del último commit y a qué ramas está asociado */

Todos los commit se aplican sobre una rama

Para mostrar los ID's de los commits del repositorio local tenemos git log.

git log -p /* Lista las ramas existentes */

git log --oneline/* Muestra un historial commits en una sola línea por commit */

git log --oneline --all /* Muestra un historial commits de todas las ramas */

Por defecto trabajamos sobre la rama máster

Para moverte entre distintas ramas podemos usar git checkout.

git checkout -b <nombreRama> /* Crea una nueva rama y se cambia a ella. */

git checkout <ID_commit> /* Volvemos a cualquier versión en base al ID del commit */

Duplicar una rama, aplicando cambios sin afectar el flujo de trabajo principal

Para ver una lista de los conflictos presentes usamos git diff.

git diff <ramaOrigen><ramaDestino>/* Ve conflictos entre ramas antes de fusionarlas */

git merge <nombreRama>/* Fusiona una rama con otra activa */

git merge --abort /* Descarta la fusión por conflictos en la misma */

git log --merge /* Muestra información de los commits causantes del conflicto */