Buenas buenas !
Entonces,
que es GIT ?Segun su pagina oficial Git es un
software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente.
Es decir, controlar las versiones, ayudarnos a trabajar en equipo y protegernos de la perdida de informacion (
entre otras cosas)
Descarguemos Git de:
https://git-scm.com/downloads
Seguimos los pasos de la instalación y terminamos teniendo la consola
podemos ver la version y/o la ayuda con
$ git --version
$ git --help
Configuramos el usuario y el mail
$ git config --global user.name "bartz"
$ git config --global user.email "[email protected]"
podemos ver las configuraciones con el comando
$ git config --global -l (solo lectura)
y se puede editar con (cuidado)
$ git config --global –e
(https://i.imgur.com/uYdnhLF.png)
La parte de alias todavia no la tenes, pero en unos minutos lo vamos a agregar
Iniciando Git en nuestro proyectoPara seguir explicando los comandos vamos a descargarnos un template web de www.initializr.com (300kb)
Creamos la carpeta de nuestro proyecto y hacemos
CD adentro de ella
$ cd /practicagit/proyecto1
una vez dentro de la carpeta corremos el comando
$ git init
Lo que hace este comando es crear una carpeta .git que usara git para hacer su magia.
Veamos como reacciona a este comando
$ git status
O el siguiente para verlo mas sencillo
$ git status -s -b
(https://i.imgur.com/1aLazpx.png)
Los archivos estan en rojo porque todavia no estan guardados, y aca cabe destacar que hay dos situaciones, archivos que estan en el "Stage" y archivos que han sido "Commited"
Tu repositorio local esta compuesto por tres "árboles" administrados por git. El primero es tu Directorio de trabajo que contiene los archivos, el segundo es el Stage que actua como una zona intermedia, y el último es el HEAD que apunta al último commit realizado.
Poniendolo en otras palabras, se agregan los archivos a guardar en en Stage, y cuando haces Commit se guarda todo lo que este en el Stage en ese momento
CommitsVamos a agregar los archivos al stage, hay varias maneras de hacerlo, talvez quieras que todo sea un solo commit o quieras agregar las imagenes primero, js despues, css despues, etc.
Añadir todos los archivos
$ git add .
Añadir un solo archivo
$ git add index.html
Añadir todos los archivos con la misma extension
$ git add *.png
Añadir todos los archivos de misma extension incluyendo subcarpetas
$ git add "*.png"
Añadir todo lo que esta dentro de una carpeta
$ git add css/
Añadir todos los de la misma extensión de una carpeta
$ git add js/*.js
Añadir una lista de archivos
$ git add <lista, de, archivos>
Añadir todos exepto uno
$ git add -A (todos)
$ git reset archivo.html (lo quita del stage)
Sea cual sea la manera que queramos en el momento, despues de añadirlo al stage hay que hacer el commit, por ejemplo subiendo el proyecto entero
$ git add .
$ git commit -m "Añadiendo plantilla inicial"
El parametro -m deja un mensaje en el commit, el cual tiene que ser descriptivo a lo que estamos haciendo, para no complicarnos la vida cuando tengamos que recordar que fue lo que hicimos en ese commit.
En este punto, ya habiendo hecho el primer commit, tenemos nuestro trabajo salvado.
Podes hacer la prueba de eliminar algunos archivos y correr el siguiente comando, el cual restaura todo como estaba en el ultimo commit
$ git checkout -- .
(atencion al espacio entre los guiones y el punto)
Veamos el log de los commits (se ordena en manera descendente, el de mas arriba es el mas reciente)
$ git log
(https://i.imgur.com/uzBCTll.png)
Se ve algo extenso para ser solo 4 commits, no ?
La mejor manera seria hacerlo con el siguiente comando que es muy util la manera en que nos muestra los branches, y demas todo muy bonito (aunque por ahora no se aprecie)
$ git log --oneline --decorate --all --graph
(https://i.imgur.com/GaWvMPb.png)
Creando un AliasDe verdad tengo que escribir todo eso cada vez que quiero ver el log ?!
Absolutamente no, vamos a ver como crear nuestros propios comandos para poder hacer todo eso con solo 2 letras
$ git config --global alias.lg "log --oneline --decorate --all --graph"
El comando que creamos es lo que le sique al punto despues de alias, por lo que ahora todo eso se convierte en
$ git lg
VIAJES EN EL TIEMPOSeguimos hablando de Git, no nos vamos a ir a 1960, pero que tal si en algun momento cambias de plan
y te conviene mucho mas retomar tu trabajo desde lo que hiciste hace 2 dias y no tener que reescribir todo el codigo ?
Es importante por esto que los commits tengan nombres descriptivos, para saber cual elegir en cada momento
Empecemos por algo sencillo, vamos a ver que diferencias tiene el archivo que tenemos actualmente con el del ultimo commit
$ git diff index.html
(https://i.imgur.com/mh3ugJg.png)
tambien podemos ver las diferencias que tiene con el que esta en el stage en vez del commit
$ git diff index.html --staged
Corrigiendo un mensaje del commit que hemos puesto mal, en el caso de haber hecho otra cosa en vez de lo que habiamos puesto
$ git commit --amend -m "Habia subido el JS y no el CSS"
tambien se puede correr solo
$ git commit --amend y nos abrira el editor de texto que elegimos durante la instalación, en mi caso VIM
Podemos tambien borrar los commits que hicimos pero sin borrar el progreso o lo que hayamos escrito, vamos a usar el log para saber el hash del commit al que queremos volver, esto nos sirve por ejemplo si en un commit subimos todos los archivos juntos y en realidad lo queriamos hacer en dos partes o algo asi.
$ git reset --soft 123123(hash)
Tambien como hablabamos antes, se puede volver a un punto anterior en el que hayamos estado trabajando, por ejemplo, actualicé todo el texto del index pero al final cambie de idea y me gustaba mas antes. Cuidado porque borra todo hasta el punto que elegimos.
$ git reset --hard 123123(hash)
(https://i.imgur.com/Wa6IGYk.png)
Como soy una persona indecisa creo que me gustaban los cambios que habia hecho y ya los borre ! Que suerte que no tengo que volver a hacer todo
Existe un comando para ver los commits borrados y todos los cambios que se hayan hecho, este se llama reflog
$ git reflog
$ git reset --hard 123123(hash)
(https://i.imgur.com/CcXflSE.png)
Ignorar ciertos archivosEsto puede ser util por ejemplo con algun log que no queramos ir guardando o dandole seguimiento, por lo que queremos que Git lo ignore completamente
Debemos crear un archivo llamado
.gitignore (atencion al punto)
y dentro de el escribimos los archivos a ignorar
*.log
css/*.min.css
etc/
BRANCHSLas branchs nos permiten trabajar en dos partes del mismo proyecto pero haciendo diferentes commits
Son utilizadas para desarrollar funcionalidades aisladas unas de otras. La rama master es la rama "por defecto" cuando creas un repositorio. Creas nuevas ramas durante el desarrollo y las fusionas a la rama principal cuando termines.
Creamos una rama con
$ git branch nombre-rama
vemos las ramas que existen con
$ git branch
cambiamos de una rama a otra con
$ git checkout nombre-rama
Tambien podemos crear y cambiar a esa rama en el mismo comando con
$ git checkout -b nombre-rama
Eliminar una rama
$ git branch -d nombre-rama
(https://i.imgur.com/2dEdQGz.png)
TAGSLas tags sirven para darles un nombre adicional a los commits, por ejemplo para marcar la primera version estable del programa
$ git tag v1.0.0 (se añade al commit actual)
Para mostrar las tags que hemos hecho
$ git tag
Para borrar un tag
$ git tag -d
tambien para añadirle a un commit anterior
$ git tag -a v0.7.0 123123(hash)
Espero que te haya sido de ayuda !
Buen aporte Bartz, si aprendes cosas más avanzadas sobre Git, seria muy útil que hicieras una segunda parte.
Saludos.
Hola!! les dejo un resumen (https://docs.google.com/document/d/1aUBa_An3QMCSgZ6jByz101zx-BOchTuzkprMmrwdw2o/edit?usp=share_link) de los comandos básicos que hice, espero que sirva! saludos!