Para iniciar un repositorio, o sea, activar el sistema de control de versiones de Git en el proyecto, solo debes ejecutar el comando $ git init. Este comando se encargará de dos cosas: primero , crear una carpeta .git, donde se guardará todas la base de datos con cambios atómicos de nuestro proyecto; y segundo, creará un área conocida como Staging , que guardará temporalmente nuestros archivos cuando ejecutemos el comando add y nos permitirá, más adelante, guardar estos cambios en el repositorio con el comando commit.
Cuando trabajamos con git nuestros archivos pueden vivir y moverse entre 4 estados diferentes (cuando trabajamos con repositorios remotos pueden ser más estados):
El comando $ git checkout + ID del commit nos permite viajar en el tiempo. Podremos volver a cualquier versión anterior de un archivo específico o incluso del proyecto entero. Esta es la forma de crear ramas y movernos entre ellas. Usando el comando git reset volvemos en el tiempo y borramos los cambios que hicimos después de este commit. Git reset y git rm son comandos con utilidades muy diferentes, pero aún así se confunden muy fácilmente.
Este comando nos ayuda a eliminar archivos de Git sin eliminar su historial del sistema de versiones. Esto quiere decir que si necesitamos recuperar el archivo solo debemos "viajar en el tiempo" y recuperar el último commit antes de borrar el archivo en cuestión. Recuerda que git rm no puede usarse porque si. Debemos usar uno de los flags para indicarle a Git cómo eliminar los archivos que ya no necesitamos en la última versión del proyecto:
Este comando nos ayuda a volver en el tiempo. Pero no como git checkout que nos deja ir, mirar, pasear y volver. Con git reset volvemos al pasado sin la posibilidad de volver al futuro. Borramos la historia y la debemos sobreescribir. No hay vuelta a atrás. Este comando es muy peligroso y debemos usarlo solo en caso de emergencia. Recordar que debemos usar algunas de estas dos opciones:
Bueno, todos los cambios están en el área de Staging, incluido el archivo con los cambios que no están listos. Esto significa que debemos sacar ese archivo del Staging para poder hacer commit de todos los demás.
Con $ git rm lo que haremos será eliminar este archivo completamente de git! Todavía tendremos el historial de cambios de este archivo, con la eliminacion del archivo como su última actualización. Recuerda que en este caso no buscábamos eliminar un archivo, solo dejarlo como estaba y actualizado después, no en este commit.
En cambio scon $ git reset HEAD, lo único que harémos será move estos cambios de Staging a Unstaged. Seguiremos teniendo los últimos cambios en el archivo, el repositorio mantendrá el archivo ( no con sus últimos cambios pero si con los últimos en los que hicimos commit) y no habremos perdido nada.
Las ramas son la forma de hacer cambios en nuestro proyecto sin afectar el flujo de trabajo de la rama principal. Esto es porque queremos trabajar una parte muy especifica de la aplicación o simplemente experimentar. La cabecera o HEAD representa la rama y el commit de esa rama donde estamos trabajando. Por defecto, esta cabecera aparecerá en el ultimo commit de nuestra rama principal. Pero podemos cambiarlo: $ git checkout -b rama o crear una rama: $ git branch rama o movernos en el tiempo a cualquier otro commit de cualquier otra rama con los comandos: $ git reset id-commit o $ git checkout rama-o-id-commit.
Las llaves publicas y privadas nos ayudan a cifrar y descifrar nuestros archivos de forma que los podamos compartir sin correr el riesgo de que sean interceptados por personas con malas intenciones.
La forma de hacerlo es la siguiente:ssh-keygen -t rsa -b 4096 -C "tu@email.com"
Solo se crean una SSH por computadora.
Después de crear nuestras llaves SSH podemos entregarle la llave pública a gitHub para comunicarnos de forma segura y sin necesidad de escribir nuestro usuario y contraseña todo el tiempo.
Para esto entrarás a la COnfiguración de llaves SSH en GITHUB, crear una nueva llave con el nombre que le quieras dar y el contenido de la llave pública de tu computadora.
Ahora podemos actualizar la URL que guardamos en nuestro repositorio remoto, solo que en vez de guardar la URL con HTTPS, vamos a usar la URL con SSH:
$ git remote set-url origin url-ssh-del-repositorio-en-gitHub
Las tags o etiquetas nos permiten asignar versiones a los commits con los cambios más importantes o significativos de nuestro proyecto.
Comandos para trabajar con etiquetas:Por ahora, nuestro proyecto vive únicamente en nuestra computadora. Esto significa que no hay forma de que otros miembros del equipo trabajen el él.
Para solucionar esto están los servidores remotos: un nuevo estado que deben seguir nuestros archivos para conectarse y trabajar con equipos de cualquier parte del mundo.
Estos servidores remotos pueden estar alojados en GITHUB, GITLAB, BitBucket, entre otros. Lo que van a hacer es guardar el mismo repositorio que tienes en tu computadora y darnos una URL con la que todos podremos acceder a los archivos del proyecto para descargarlos, hacer cambios y volverlos a enviar al servidor remoto para que otras personas vean los cambios, comparen sus versiones y creen nuevas propuestas para el proyecto.
Esto significa que debes aprendender algunos nuevos comandos:En un entorno profesional normalmente se bloquea la rama master, y para enviar código a dicha rama pasa por un code review y si se aprueba se unen los códigos con los llamados merge request.
Para analizar pruebas enviamos el código a servidores que normalmente los llamamos staging develop(servidores de pruebas) al realizar las pruebas pertinenetes tanto del código como de la aplicación estos pasan al servidor de producción con el ya antes mencionado merge request.
El comando rebase es una mala práctica, nunca se debe usar, pero para efectos del tutorial lo veremos para hacer tus propios experimentos. Con rebase puedes recoger todos los cambios confirmados en una rama y ponerlos sobre otra.
Cuando necesitemos regresar en el tiempo porque borramos alguna línea de código pero no queremos pasarnos a otra rama porque nos daría un error al tener que pasar por ese "mal cambio" que hicimos en stage, podremos usar $ git stash y regresar así al cambio anterior que hicimos.
$ git stash es típico cuando hacemos cambios que no merecen una rama o no merecen un rebase si no que simplemente estamos probando algo y queremos volver rápidamente a la versión anterior que es la correcta.A veces creas archivos cuando estas realizando proyectos y que realmente no forman parte de nuestro directorio de trabajo, que no los deberias agregar y lo sabes.
Existe un mundo alternativo en el cual vamos avanzado en una rama pero necesitamos en main uno de estos avances de la rama, para esto utilizaremos el comando :
$ git cherry-pick IDCommit.
cherry-pick es una mala práctica porque significa que estamos reconstruyendo la historia, usa cherry-pick con conocimiento de causa. No saber que es lo que estas haciendo es peligroso.
A veces hacemos un commit, pero resulta que no lo queremos mandar porque faltaba algo más. Utilizamos:
$ git commit --amend
amend en inglés es remendar y lo que hará es que los cambios que hicimos nos los agregará al commit anterior.
¿Que pasa cuando todo se rompe y no sabemos que está pasando? Con:
$ git reset HashDelHEAD
volveremos al estado en que el proyecto funcionaba:
git reset es una mala práctica, se recomienda no usarlo; debe ser el último recurso.
A medida que se hace más grande el proyecto quieres ir buscando más cosas. Por ejemplo, ¿ Cuantas veces en nuestro proyecto buscamos la palabra color?