Jere

Git Notes

Configuraciones iniciales

Pueden ser globales o para proyectos especificos

git config --global user.name "username"
git config --global user.email "mail"
git config --global color.ui true
git config --global --list

Inicia proyecto, se usa solo una vez:

git init  

Muestra lo que ya subimos o lo que nos falta por subir:

git status


###commits

Adiciona carpetas al commit:

git add 

Asigna comentarios de lo que cambiamos:

git commit -m "mensaje" 

Muestra todos los commit que hicimos:

git log

Muestra los commits de una manera mas ordenada y legible

git log --graph --abbrev-commit --oneline

Con el hash del commit, podemos volver a un commit específico:

 git checkout 2071abbddae7ee1d32c4508a1c02993ae3b0b2b6

Luego de hacer un git add, con este comando vamos a agregar eso al último commit que se haya hecho en el equipo:

git commit --amend 

Cambia el ultimo commit si no esta subido al remoto:

git commit --ammend -m "xxxxxxx"

Deshacer commits:

git reset --soft 
git reset --mixed 
git reset --hard   

Con este comando borramos todo y volvemos al estado del ultimo commit

git reset --hard   HEAD~1

Si creaste archivos y luego hiciste un 'reset --hard', con este comando te borra los archivos ignorados y no solo el código:

git clean -f -d 


###branch

Muestra las ramas:

git branch 

Crea una rama:

git branch nombre 

Moverse en las ramas:

git checkout rama

Borra rama local:

git branch -d rama

Adiciona toda la rama en la rama que estamos posicionados:

git merge rama 

Subir rama a repositorio remoto:

git push origin rama

Borra rama remota:

git push origin --delete rama 

Cambiar de una rama a otra

git switch rama


###Repositorio remoto

Conectar con GitHub:

git remote add origin <link_$ github> 

Ver nuestra conexión:

git remote -v 

Eliminar repositorio remoto:

git remote remove origin

Enviar cambios a $ github:

git push origin master 

Si por alguna razon hicimos un reset y queremos borrar el commit q continua en el repositorio remoto, con este comando forzamos a que nuestro local quede como head y asi borramos lo q le continua en el remoto:

git push origin -f

###Stash

Si estuvimos trabajando en la rama incorrecta y ahora no podes hacer un switch del branch y tampoco queres commitear los cambios, tenés que hacer:

git stash 

ahora cambias de branch $ git switch branch, y despues aplicas los cambios guardados en el stash:

git stash apply
git stash drop


Issues : Son una forma de continuar, mejorar o solucionar un error en nuestros repositorios (proyectos)

Milestones : Son grupos de issues que aplican para un proyecto, característica o periodo de tiempo.

Labels : son una manera de organizar distintos tipos de problemas.



###Tags

Tags anotadas, con msj:

git tag -a v1.0 -m "Mensaje" 

Tag a commit específico:

git tag -a v1.0 -m "Mensaje" codigoSHA // tag a commit especifico

Subimos a GitHub nuestro tag:

git push origin v0.1 
git push origin --tags


###merge

En caso de que el master remoto tenga un commit de mi compañero, hago este comando y el máster se copia en el branch oculto 'origin/master':

git fetch origin 

Luego del fetch, hacemos el merge de origin/master con nuestro master local, así combinamos el commit del master remoto con nuestro commit local, y genera un commit con todo:

git merge origin/merge

luego solo queda subir todo con:

git push origin master

Cuando hacemos un merge puede hacer 2 acciones: fastfoward -> cuando hay cambios en distintas partes del código de parte de usuarios distintos Manual Merge -> cuando se cambiaron mismas lineas de código (conflicto)



Cuando queremos colaborar en un proyecto que no estamos registrados, hacemos FORK del proyecto y se copia en un repositorio de nuestro usuario.

Descarga del proyecto principal:

git fetch upstream
```

Si hacemos ``$ git fetch origin`` descarga desde nuestro repo remoto

Si tenemos un cambio en nuestro foro y queremos subirlo al repo principal, se lo solicitamos a la organización a través de un pull request, luego lo revisan a ver si se acepta el pull o no

---

####Git pages

En nuestro usuario, creamos un repo que termine con .github.io y clonamos, solo podemos poner frontend, lo que guardemos en el repo se muestra ahí
Si ya teníamos un repo creado y trabajado, lo que tenemos que hacer es crear una rama que se llame 'gh-pages' y hacer el merge de lo que venimos trabajando, se la a visualizar como web si estamos trabajando un frontend

---
---


*Una vez no andaba el push a github porque tenía commit en el local que no tenía en el remoto y viceversa, lo arregle así:

```
git fetch --all
git reset --soft origin/master
git add --all
git commit -am "mensaje del commit"
git push origin master
```