TUTORIAL BÁSICO Y COMANDOS ÚTILES DE GIT

Indice De Contenidos
Instalar Git Verificar Version de Git Configurar nombre y correo de contribuidor de GIT
Visualizar nombre y correo de contribuidor de GIT Creación de un repositorio local Arquitectura básica de GIT
Verificar en que estado se encuentran los archivos del repositorio Pasar del estado Working Directory – Staging Area Pasar del estado Staging Area - Repository
Verificar cambios entre el repositorio actual y el último commit Restaurar archivos del último commit Quitar archivos del Staging Area
Historial de commits Alias para comandos Modificar mensaje de un commit
Cambio de nombres a archivos dentro del repositorio Eliminar un archivo del repositorio Recuperar archivos de anteriores commits
Obtener el id o hash del commit Git reflog Ubicarse en otro commit manteniendo los cambios del último commit
Archivo .gitignore Ramas Etiquetas

Git es un sistema de control de versiones distribuido gratuito y de código abierto diseñado para manejar todo, desde proyectos pequeños hasta muy grandes, con rapidez y eficiencia. (Fuente: https://git-scm.com/)

  1. Instalar GIT

Descargar e instalar GIT desde la página oficial https://git-scm.com/downloads, una vez instalado abrimos el GIT BASH.

Subir :point_up:

  1. Verificar versión de GIT

Para saber la versión de Git instalada utilizamos el comando git --version

Subir :point_up:

  1. Configurar nombre y correo de contribuidor de GIT

Para comenzar debemos identificarnos con un nombre y un correo, esto se lo hace una sola vez y es útil para trabajar en equipo, ya que se podrá ver quién hizo los cambios del código.

Subir :point_up:

  1. Visualizar nombre y correo de contribuidor de GIT

Con el comando git config —global -l puedo ver el usuario y correo actual del repositorio local

Subir :point_up:

  1. Creación de un repositorio local

Primero nos ubicamos en la carpeta que queremos tener nuestro repositorio local, ya dentro de la carpeta seleccionada ejecutamos el comando git init el cual inicializa el repositorio local creando una carpeta .git oculta.

Subir :point_up:

  1. Arquitectura básica de GIT

Para entender de manera general a Git, hablaremos de sus 3 estados o áreas que se manejan.

El working directory es el estado inicial, en donde se encuentran todos los archivos de la carpeta en donde se inicializó el git, pero que aún no han sido incrustados en el repositorio. El staging area es un estado intermedio de GIT en donde se encuentran los archivos escogidos para ser incrustados en el repositorio, pueden ser todos los archivos o los que yo elija específicamente. Por último el repository es el estado final, en donde ya se encuentra guardada una versión de los archivos.

Subir :point_up:

  1. Verificar en que estado se encuentran los archivos del repositorio.

git status muestra el estado actual de los archivos. Si los nombres de los archivos están en rojo, es porque aún no han sido añadidos al repositorio, es decir que siguen en el working directory. Si los nombres de los archivos están en verde significa que ya se encuentran añadidos al staging area. Finalmente si aparece el mensaje Nothing to commit, working tree clean, significa que todos los archivos ya han sido subidos al repositorio.

Subir :point_up:

  1. Pasar de estado Working Directory – Staging Area

Para pasar de estado (Working directory – Staging Area), debemos ejecutar el comando git add .

Si hacemos un git status, los nombres de los archivos se cambian a color verde. Hay que tomar en cuenta que el punto “.” al final del git add significa que se añaden todos los archivos de la carpeta al staging área, si se desea añadir archivos específicos, se especifica el nombre del archivo, ejemplo: git add index.html y solo el index será añadido al staging área.

Subir :point_up:

  1. Pasar de estado Staging Area - Repository

El comando git commit -m “[Mensaje]” se utiliza para terminar de añadir los archivos del staging area al repositorio. El mensaje dentro de las comillas sirve para identificar el cambio realizado.

Subir :point_up:

  1. Verificar cambios entre el repositorio actual y el último commit

El comando git diff sirve para comparar la situación actual del repositorio con la del último commit. Es decir, muestra si faltan o han sido modificados archivos.

Subir :point_up:

  1. Restaurar archivos del último commit

El comando git checkout . sirve para restaurar los archivos al último commit en caso de haber modificado los archivos por error.

Subir :point_up:

  1. Quitar archivos del Staging Area

El comado git reset sirve para quitar los archivos del staginig área y devolveros al working directory, esto es útil en caso de equivocarnos en agregar archivos al staging area que no queremos añadirlos al repositorio.

Subir :point_up:

  1. Historial de commits

El comando git log muestra un histórico de los commits realizados incluyendo su id-hash, la fecha, el autor y el correo del usuario que lo realizó.

Subir :point_up:

  1. Alias para comandos

Los alias sirven para establecer un nombre corto o cualquier nombre a un comando con el fin de ahorrar tiempo o facilitar su escritura.

git config –global alias.[Alias] “[Comando]”

Subir :point_up:

  1. Modificar mensaje de un commit

Si se comete algún error al poner el mensaje del commit puedo cambiarlo mediante el comando git commit –amend -m “[Nuevo mensaje]”

Subir :point_up:

  1. Cambio de nombres a archivos dentro del repositorio

Si se desea cambiar el nombre de un archivo que ya fue puesto en el repositorio, puedo hacerlo de dos maneras, la primera cambiando el archivo manualmente desde el explorador de archivos y después ejecutar los comandos git add . y git commit , pero una buena práctica es mediante el comando git mv [Nombreantiguo] [Nombrenuevo] debido a que se sabe que archivos fueron renombrados (renamed en el git status). Cabe recalcar que los cambios se reflejan automáticamente en el explorador de archivos. Finalmente también es necesario terminar de añadir los cambios al repositorio mediante los comandos git add . y git commit

Subir :point_up:

  1. Eliminar un archivo del repositorio

Al igual que el caso anterior, si debemos borrar un archivo, podemos eliminarlo y volver a hacer el commit, sin embargo para llevar una control de la versión, se recomienda usar el comando git rm [Archivo]

Subir :point_up:

  1. Recuperar archivos de anteriores commits

Si por error eliminé un archivo o deseo recuperarlo, puedo volver a recuperarlo a través del comando git reset --hard [commitid] , en donde el commitid es el el id del commit al que queremos llegar después del hard.

Subir :point_up:

  1. Obtener el id o hash del commit

Podemos obtener el id o hash del commit tras ejecutar los comandos git log o git reflog, en donde el id son la combinación de números y letras presentadas en color amarillo-

Subir :point_up:

  1. Git reflog

Después de volver a un commit anterior, el comando git log no mostrara los cambios realizados después de ese commit, sin embargo con el comando git reflog sí se puede visualizar todo el histórico de commits realizados en el repositorio.

Subir :point_up:

  1. Ubicarse en otro commit manteniendo los cambios del último commit

Los comandos git reset —mixed [Commitid] y git reset —soft [commitid] , sirven para ubicarse en otro commit, con la característica de que los cambios del último commit se van a mantener. La diferencia entre el git reset mixed y git reset soft radica en que el primero (mixed) tendrá todos los nuevos archivos dentro del working directory en cambio el segundo (soft) tendrá agregado los archivos al staging area.

Subir :point_up:

  1. Archivo .gitignore

El archivo .gitignore permite excluir archivos que no queremos que se carguen en nuestro repositorio, pueden ser configuraciones, dependencias o cualquier tipo de archivos que queremos que git ignore al momento de subirlo al repositorio.

  • Ahora voy a crear el archivo .gitignore y añadiré el archivo que no quiero que sea tomado en cuenta en este caso Arquitectura Angular2

Subir :point_up:

  1. Ramas

Las ramas son extensiones del proyecto que apuntan a la rama principal, estas sirven para trabajar de manera experimental sobre el proyecto y cuando se está seguro de las modificaciones desarrolladas se las carga a la rama principal (master) a través de un merge.

  • Caso 1: cambios en la nueva rama pero el master se mantiene igual.
  • Comenzamos con el archivo index.html vacío y añadido al repositorio en la rama principal.

  • Creamos la nueva rama llamada caso1

  • Modificamos el index.html de la rama caso1

  • Guardamos y lo añadimos al repositorio

  • Volvemos a la rama principal y hacemos merge

  • Como podemos ver no generó conflicto, más bien añadió automáticamente los cambios de la rama caso1 a la rama master.

  • Caso 2: cambio en la rama master pero la nueva rama se mantiene igual
  • Comenzamos con el archivo index.html vacío y añadido al repositorio en la rama principal.

  • Creamos la nueva rama llamada caso2.

  • Modificamos el archivo index.html de la rama principal, lo guardamos y lo añadimos al repositorio.

  • Hacemos merge con la rama creada que esta con el index.html vacío.

  • En este caso no dio ningún conflicto aunque los dos archivos index.html eran distintos, pero al contrario del caso anterior, la rama creada no se llenó con los datos de la rama master se quedó igual a cuando fue creada la rama, en este caso se mantuvo vacío.

  • Caso 3: El mismo cambio tanto en la rama master como en la nueva rama
    • Comenzamos con el archivo index.html vacío y añadido al repositorio en la rama principal.

  • Creamos la nueva rama y modificamos el index.html

  • Lo añadimos al repositorio de la rama creada

  • Cambiamos a la rama master y hacemos el mismo cambio

  • Añadimos el cambio al repositorio de la rama master.

  • Hacemos merge con la rama creada.

  • En este caso aparece este mensaje en donde podemos especificar qué mensaje queremos asignarle al último commit. Al hacer merge se utiliza el ultimo commit de la rama creada, pero en este caso como son los mismos cambios podemos asignar cualquier nombre al commit.

Para salir de la pantalla debemos aplastar esc + :wq y saldremos del editor guardando los cambios.

  • Podemos ejecutar nuevamente el merge sin generar conflictos

  • Se puede observar con git log los commits y si se añadieron líneas en el archivo abierto se lo podrá visualizar.

  • Caso 4: cambio en las mismas líneas de código de la rama master y de la nueva rama.
  • Comenzamos con un archivo index.html con la estructura html5 alojado en la rama principal y añadido al repositorio.

  • Creamos la nueva rama y modificamos el index.html añadiéndole una etiqueta script.

  • Guardamos y lo añadimos al repositorio.

  • Regresamos a la rama master y modificamos el index.html, solo que esta vez añadiremos una etiqueta de párrafo.

  • Guardamos y lo añadimos al repositorio

  • Realizamos el merge con la rama creada.

  • Aquí podemos ver un conflicto ya que los dos archivos fueron modificados en la misma línea.

Abrimos el index.html de la rama master y observamos símbolos de igual, flechas hacia la derecha y hacia la izquierda, esto simboliza los conflictos entre las ramas y para solucionarlo tenemos que eliminar estos símbolos y letras manualmente.

Cambios:

Guardamos y lo añadimos al repositorio.

  • Una vez resuelto podemos verificar con otro merge a la rama y todo estará sin errores.

  • Hay que tomar en cuenta que así se haya solucionado el conflicto los index de las dos ramas son distintos ya que el index de la rama se mantendrá igual a su último commit.
  • Si se desea observar de una manera más gráfica se puede digitar el comando git log —oneline —decorate —all --graph

Subir :point_up:

  1. Etiquetas

Para poder versionar nuestro código podemos hacer uso del comando git tag [Versión] de la siguiente manera:

Así mismo podemos borrarlo mediante git tag -d [Versión]

También podemos ponerle tag a cualquier commit, previamente creado, mediante la instrucción git tag -a [Versión] [Commitid] -m “[Mensaje]”

Subir :point_up: