¿Qué es Git?

Es un sistema de control de versiones distribuido.

¿Qué es un sistema de control de versiones?

Es un sistema que permite registrar cada cambio que se realiza a un archivo o archivos a lo largo del tiempo.

Tipos de sistemas de control de versiones

Git ¿Qué beneficios tiene?

Git almacena referencias a los archivos que no se han cambiado. Cualquier trabajo es local, puedes trabajar en cualquier parte incluso sin internet.

Estados de Git

Instalación

Linux:

sudo apt-get install git

macOs

http://git-scm.com/download/mac

windows

https://git-scm.com/download/win

Configuraciones básicas

git config --global user.email xyz@mail.com
git config --global user.mauro "Nombre Apellido"
git config --global color.ui true
git config --list

Git comandos

Iniciar un repositorio

git init crea un repositorio de manera local y lo hará en la carpeta donde estamos posicionados o se le puede pasar [nombre_de_la_carpeta] y creará la carpeta con ese nombre.

git init
git init nombre_carpeta

Para borrar un repositorio, vamos a usar el comando rm -rf .git.

rm -rf .git

git add | rm | status (Agregando, quitando y observando estados de los archivos)

Los archivos que salen en rojo: Se encuentran en el Working Directory. Los archivos que salen en verde: Se encuentran en el Staging Area.

touch index.html
git status
git add index.html
git rm --cached index.html

git commit (Confirmando cambios)

git commit -m "mensaje"
git commit –-amend
git log

git tag (Etiquetando confirmaciones)

Como muchos VCSs, Git tiene la habilidad de etiquetar (tag) puntos específicos en la historia como importantes. Generalmente la gente usa esta funcionalidad para marcar puntos donde se ha lanzado alguna versión (v1.0, y así sucesivamente). En esta sección aprenderás cómo listar las etiquetas disponibles, crear nuevas etiquetas y qué tipos diferentes de etiquetas hay.

Descripcion de opciones:

git tag -a 0.5 -m 'mensaje'
git tag -a v1.4 -m 'my version 1.4'
git tag -l
git tag -f -a 0.1 -m 'iniciando el proyecto' 5d9c9227cda4b11983fe08139ad7fd9a84b61596

git log (Historia proyecto)

git diff (Revisando los cambios entre versiones)

git reset

git branch (Múltiples variantes del repositorio)

Una rama es una línea alterna del tiempo (del proyecto). La rama por defecto es master, la rama de GitHub Pages es gh-pages y cuando se trabaja como colaborador se identifica el proyecto principal con la rama upstream.

git checkout (Moviéndonos entre ramas y versiones)

Nota Importante! Si existen archivos modificados en el Working Directory o agregados en el Staging Area, estos cambios los mantendrá a pesar de que se cambie entre ramas. Para asegurar que los cambios que se están realizando se mantengan en esta rama es necesario realizar un git add y un git commit de los archivos modificados antes de cambiar a otra rama.

git merge (Mezclando ramas y resolviendo conflictos)

En Git se pueden mezclar ramas, al realizar una fusión ocurrirá que la operación se realizó con éxito (Fast-Forward) o que la operación presentó unos conflictos (Manual Merge).

Fast-Forward Es lo que ocurre cuando ocurre un cambio en una rama y al fusionarla con la otra no presenta conflictos ¿por qué no presenta problemas? Porque solo en una rama ocurrió un cambio en la misma línea de código por lo tanto se agrega la nueva y se reemplaza la vieja. recursive/auto-merging ambas ramas salieron al mismo tiempo y hay algo nuevo en la rama que la otra no recuerda, por eso hace la mezcla recursiva. Manual Merge Es lo que ocurre cuando en ambas ramas se realizaran modificaciones afectando las mismas líneas de código ¿que pasa con esto? Sencillo, Git te pedirá que elijas con cual fragmento de código (cambio) te quedarás y lo dividirá con unas flechas, por ejemplo:

<<<<< [Rama A]
[Aquí estará el código de la modificación número 1]
=====
[Aquí estará el código de la modificación número 2]
>>>>> [Rama B]

git rebase (Reescribe la historia de tu proyecto)

git rebase -i [branch]: de manera interactiva, nos abrira el editor que tengamos definido en la configuración de git.

git stash (Guardando cambios temporalmente)

¿Qué tal si aún no estás listo para confirmar ningún cambio? Stash es un estado que tenemos como intermedio. Para esto debemos ir a alguna de nuestras ramas y usando el comando git stash que nos permite hacer cambios, pero no confirmarlos.

El cambio más reciente (al crear un stash) SIEMPRE recibe el valor 0 y los que estaban antes aumentan su valor.

Al crear un stash tomará los archivos que han sido modificados y eliminados. Para que tome un archivo creado es necesario agregarlo al Staging Area con git add [file].

Al aplicar un stash este no se elimina, es buena práctica eliminarlo.

Cherry pick eligiendo commits selectivamente

Si estás trabajando en una rama, pero de repente notas que hiciste un cambio en la rama que no debías, para esto podemos usar cherry-pick. Este comando nos puede salvar la vida, ya que nos permite sacar cambios específicos de una rama y mezclarlos en otra.

Repositorio remoto comandos (Github)

git clone/fork (Clonando repositorios remotos)

Clonar un repositorio en un nuevo directorio Un fork va a clonar el proyecto y nos va a crear un nuevo proyecto en el GitHub.

Añadiendo una llave ssh a GitHub

Si quieres mantener tu seguros dentro de GitHub es importante usar llaves ssh con el comando ssh-keygen -t rsa -b 4096 -C “xyz@mail.com”.

git remote (Añadiendo un repositorio remoto a uno local)

Tenemos que crear una conexión entre tu repositorio local y tu repositorio remoto para que puedas compartirlo con la comunidad. Para esto vamos a usar un nuevo comando que en este caso es git remote. Por convención lo nombramos “origin”. Para borrarlo podemos usar git remote remove y el nombre del repositorio.

git remote add origin git@github.com
git remote -v
git remote origin

git pull/fetch (Descargando cambios desde un repositorio remoto)

Vamos a compartir nuestro código con el repositorio remoto. Antes de poder enviar cambios tengo que tener los mismos cambios en el repositorio remoto que en el repositorio local. Para traer los cambios del repositorios remoto vamos a usar el comando git fetch. Este comando recibe dos parámetros 1. desde donde y hacia donde van. Luego de traer los cambios, debemos mezclarlos con la rama que estamos usando en local. Para esto usamos git merge.

git fetch origin master
git merge origin/master --allow-unrelated-histories
git pull origin master

git push (Enviando cambios al repositorio remoto)

Sube los cambios hechos en tu ambiente de trabajo a una rama de trabajo tuya y/o de tu equipo remota.

git push origin master
git push origin master --tags
git push origin otra_rama