...en construcción...

jp.av.dev 2020-07-16 01:26:05 -04:00
commit f5c2b1cf70

238
Comandos-Basicos-Git.md Normal file

@ -0,0 +1,238 @@
# Hoja de comandos basicos git
-----
## Instalar y configurar user:
```
# Repositorio, ej.
add-apt-repository ppa:git-core/ppa
```
```
git --version
git config --global user.name "Nombre"
git config --global user.mail "Mail Git"
```
```
# Lista de configuracion global
git config --global --list
# Ayuda
git help (comando)
```
# Secuencia tipica de uso:
## Crear repositorio en directorio actual
```
git init
git add [archivo odirectorio]
git add -A (Agregar todo a confirmacion)
git commit -m "Mensaje"
# add -A + Commit
git commit -am "Mensaje"
git commit -m "--amend para sobreescribir el ultimo commit" --amend
```
### HEAD, puntero, indica el commint en el cual esta situado el puntero de git
### Listar Ramas
`git branches --list`
### Otros
```
git status
git log
git config --global alias.[alias] "comando" # Alias
```
## Git Reset
#### RESET
##### deja el proyecto en el stado del commit indicado
##### ***--hard --mixed --soft***
#### HARD:
##### Working Dir = Staging Area = Repository
`git reset --hard [SHA commit]`
#### MIXED: Staging Area = Repository. Working Dir a la espera de la iteracion basica (add, commit)
Sire para encapsular por ejemplo: restear 5 commits para integrarlos en un solo commit"
Si vuelvo a hacer un reset --mixed a un commit de los que fueron encapsulados, se ignora/
elimina el commit que encapsulaba estos.
`git reset --mixed [SHA commit]`
##### Hay q hacer el add y commit del cambio
#### SOFT:
No afecta el working area?
`git reset --soft [SHA commit]`
##### Solo hay q hacer el commit para aplicar el cambio
### CHECKOUT
##### "Ir a una version, deatached mode, permite generar una nueva rama(branch) a partir de este"
```git chekout [SHA commit]
Te encuentras en estado 'detached HEAD'. Puedes revisar por aquí, hacer
cambios experimentales y hacer commits, y puedes descartar cualquier
commit que hayas hecho en este estado sin impactar a tu rama realizando
otro checkout.
Si quieres crear una nueva rama para mantener los commits que has creado,
puedes hacerlo (ahora o después) usando -c con el comando checkout. Ejemplo:
**git switch -c <nombre-de-nueva-rama>**
O deshacer la operación con:
**git switch -**
```
##### Cada ***commit tiene un parent*** .. "de que 'punto' viene"
## BRANCHES
##### linea alterna del repositorio
#### Crear rama
```
git branch "nombre_rama"
# checkout -b crea la rama y posiciona en ese punto
git checkout -b "nombre_de_raiz_para_nueva_rama"
```
#### Borrar rama
```
git branch -d "rama"
-D (para forzar)
```
##### al hacer el comit el head se posiciona en el top de la rama
`git commit -am "nuevo_commit"`
##### volver a la rama principal
`git checkout master`
##### Mover HEAD entre ramas
`git checkout "rama"`
##### Omitir preparación archivo
git checkout -- "archivo"
### FUSIONAR ramas
##### (fusiona desde la rama actual, debes posicionarte en master)
`git merge "rama"`
#### SOLUCIONES de CONFLICTOS de FUSIONES:
##### -Fast-Forward -Manual Merge
### REBASE
##### (desde la rama a realizar rebase)
##### añade los comits de la ram experimental delante de la rama master
##### posterior al REBASE (master) sigue en su último anterior commit
```
git rebase master
git checkout master
git merge "experimental"
```
### LOG
#### Log STAT, explica con detalle nro. de lienas cambiadas
`git log --stat`
#### Log con DIFF
`git log -p`
#### Log por author
`git shortlog`
#### otros
`git log -2 # ver los últimos 2 commits`
#### filtros:
```
git log --after="today"
--after="2020-12-07"
--after="2020-12-07" --before="today"
--author="nombre"
--grep="grep" -i (ignore Lower/Upper)
```
##### Busqueda por contenido de archivos, muestra en que commit se creó
`log -S"búsqueda"`
### Alias Log
```
git config --global alias.lg "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"
git config --global alias.lg2 "log --graph --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"
```
### Git stash
##### guarda cambios en un estado termporal, no aplica cambios inmediatamente
```
git stash
git stash list
git stash aplply
```
### Git fetch
`git help fetch`
### Git diff
##### muestra las diferencias hasta el punto en el este desde el commit indicado
`git diff 'commit id'
### Clonar Repositorio
`git clone [repos ssh o https]`
### Llaves ssh
##### listar llaves
`ssh-add -l`
##### SSH -t (algoritmo=rsa) -b (bits key) -C "comentario/mail"
```ssh-keygen -t rsa -b 4096 -C "mail@git"
$ eval $(ssh-agent -s)
> Agent pid 59566
ssh-add .ssh/[key_rsa]
cat .ssh/[key_rsa.pub]
```
## Médotodos remotos tipícos (git-repos)
### Clonar repositorio (o https):
```
git clone ssh://gite@192.168.0.8/jp.av.dev/test_repo.git
"Creating a new repository on the command line"
touch README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin sshUsr@host:RepoUsr/Repo.git
git push -u origin master
```
### Ver y eliminar vinculo con repositorio remoto
```
git remote -v
git remote rm origin
"Pushing an existing repository from the command line"
" ssh "
git remote add origin gite@192.168.0.8:333/jp.av.dev/test_r.git
git push -u origin master
" http "
git remote add origin http://192.168.0.8:3000/jp.av.dev/test_repo.git
```
## Git ignore
"Crear archivo .gitignore añadir archivo/carpeta/extension para ignorarlos
no guardar archivos sensibles, regex, ej. .*"
-----
## 📌️ **Docs, Referencias...**
* [All Commmands](https://git-scm.com/docs/git)
* [Git Reference](https://git-scm.com/docs)
* [PDF Cheat Sheet](https://education.github.com/git-cheat-sheet-education.pdf)
* [PDF Cheat Sheet 2](https://github.github.com/training-kit/downloads/github-git-cheat-sheet.pdf)
* [Interactive Cheat Sheet](https://ndpsoftware.com/git-cheatsheet.html)