Git es un sistema de control de versiones distribuido, libre y open source, diseñado para manejar desde pequeños a grandes proyectos con rapidez y eficacia.
Git almacena estas versiones en repositorios locales, por lo que necesitamos usar plataformas en la nube como Github para crear repositorios remotos.
Estados de git
En git existen 3 estados o fases:
Working directory: empezamos a trabajar con nuestros archivos de código pero aún no se han añadido la siguiente fase para llevar un seguimiento de los mismos.
Staging area: aquí ya tenemos los archivos listos para crear una revisión o commit.
Repository: los commit son almacenados en un repositorio, por defecto local, pero podemos usar nubes como github para tener un repositorio remoto con nuestro código.

Primeros pasos
Como requisitos previos tenemos que tener instalado Git y una cuenta creada en Github. Arriba están los enlaces.
Para abrir la terminal de git tenemos que hacer click derecho en la carpeta donde vayamos a trabajar con nuestro proyecto > Git bash here

Añadir los datos de identificación de nuestro usuario:
Esta información se puede comprobar con:
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge --skip -- %f
filter.lfs.process=git-lfs filter-process --skip
filter.lfs.required=true
credential.helper=manager
user.name=Alex
user.email=alexclementefornas95@gmail.com
core.editor=notepad
Crear la estructura inicial de Git para que git pueda trabajar.
Initialized empty Git repository in C:/Users/Documentos/test/.git/
Podemos comprobar que se ha creado la carpeta .git
total 8
drwxr-xr-x 1 alexinadamas 197121 0 feb. 15 20:04 ./
drwxr-xr-x 1 alexinadamas 197121 0 feb. 15 19:58 ../
drwxr-xr-x 1 alexinadamas 197121 0 feb. 15 20:04 .git/
Ahora podemos crear nuestros archivos:
Por ahora, estos archivos están en el working directory. Si utilizamos el comando git status veremos que los nombres de los archivos aparecen en rojo indicándonos que no se está haciendo un seguimiento de estos archivos.

Añadir los archivos a la stage area
El punto «.» se utiliza para añadir todos los archivos. Se podría especificar el nombre de un archivo en concreto.
Si usamos el comando git status nuevamente veremos que los archivos ya aparecen en verde.

Crear un commit
Con los archivos ya preparados en el stage area ya podemos crear un commit con los cambios realizados. Añadiremos una breve descripción del contenido de la revisión.
[master (root-commit) eb2b10e] Creación del index y style
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.html
create mode 100644 style.css
Los commit quedan almacenados en el nuestro repositorio. Con git log podemos ver los existentes.
commit eb2b10e4c3f5a4c9826fd10dc0846999ed58b28a (HEAD -> master)
Author: Alex <alexclementefornas95@gmail.com>
Date: Sat Feb 15 20:19:11 2020 +0100
Creación del index y style
Date: Sat Feb 15 20:19:11 2020 +0100
[crayon-600c3a2439334270510960/]
También podemos usar
Repositorio en Github
Creamos un repositorio desde https://github.com/new
En la siguiente página ya tendremos el enlace para acceder a nuestro repositorio

Volvemos a la terminal y añadimos el repositorio remoto.
origin es el nombre que le damos a este repositorio.
Podemos comprobar los repositorios remotos añadidos:
origin https://github.com/alexynadamas/bananas.git (fetch)
origin https://github.com/alexynadamas/bananas.git (push)
Eliminar el repositorio remoto
Subir los cambios de la rama actual al repositorio remoto
La primera vez nos pedirá logearnos

Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 246 bytes | 246.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/alexynadamas/bananas.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
NOTA: Estos credenciales se quedan registrados en el Administrador de credenciales de Windows. Aquí es donde se pueden quitar.
Panel de control\Todos los elementos de Panel de control\Administrador de credenciales
Podemos comprobar que nuestros archivos ya aparecen en nuestro repositorio de github.
Trabajando con ramas
Dentro de un proyecto tendremos la línea principal de trabajo que será la rama master. Añadiremos más ramas del proyecto que representarán otras funcionalidades para unirlas a la rama principal más adelante pero se podrán trabajar por separado.
Podemos ver las ramas existentes con git branch
* master
También podemos ver las ramas «ocultas», es decir, las copias de origin del servidor
footer
* master
remotes/origin/footer
remotes/origin/master
Crear una rama
Borrar una rama
Deleted branch footer (was eb2b10e).
Seleccionar la rama creada para trabajar con ella
Switched to branch 'footer'
Se puede crear y cambiar a la rama de trabajo a la vez con
Switched to a new branch 'footer'
Para hacer la prueba vamos a modificar uno de nuestros archivos
Lo añadimos al staging area y creamos un commit
Subimos el commit al repositorio de github
fatal: The current branch footer has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin footer
La primera vez nos dice que utilicemos este comando
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 282 bytes | 282.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/alexynadamas/bananas.git
eb2b10e..109e433 footer -> footer
Podemos observar que aparece la rama en github con el fichero modificado.
Ahora podemos unir la nueva rama a la rama principal
Seleccionamos la rama principal
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
Y ahora especificamos la rama que vamos a fusionar con la master
Updating eb2b10e..109e433
Fast-forward
index.html | 1 +
1 file changed, 1 insertion(+)
El contenido de la rama footer se fusionará con el de la rama master. En nuestro caso el archivo modificado index.html en la rama footer será modificado por el index.html de la rama master.
Por último podemos hacer un git push para actualizar la rama master de github
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/alexynadamas/bananas.git
eb2b10e..109e433 master -> master