edicion

jp.av.dev 2021-07-07 02:01:19 -04:00
parent 6823431e04
commit 5f3e37f4b1

@ -33,18 +33,19 @@ add-apt-repository ppa:git-core/ppa
```bash
git --version
git config --global user.name "Nombre"
git config --global user.mail "Mail Git"
git config --global user.name "nombre"
git config --global user.mail "mail"
```
```bash
# Lista de configuracion global
# Lista de configuracion
git config --global --list
git config --local --list
# Ayuda
git help (comando)
```
# Secuencia tipica de uso:
# Secuencia tipica de uso:
## Crear repositorio en directorio actual
```bash
git init
@ -53,51 +54,55 @@ git add -A (Agregar todo a confirmacion)
# Remove a file from the workspace and the index
git rm file(s)...
git commit -m "Mensaje"
git commit -m "mensaje"
# add -A + Commit
git commit -am "Mensaje"
git commit -am "mensaje"
git commit -m "--amend para sobreescribir el ultimo commit" --amend
```
##### HEAD ` indica el commint en el cual esta situado el puntero de git`
***HEAD*** : indica el commit en el cual esta situado el puntero de git
### Otros
`git status`
`git log`
`git config --global alias.[alias] "comando"` Alias
`git branches --list`
```sh
git status
git log
git config --global alias.[alias] "comando"`
git branches --list
```
## Git Reset
#### RESET
##### deja el proyecto en el stado del commit indicado
##### ***--hard --mixed --soft***
**RESET** : deja el proyecto en el stado del commit indicado
* ***--hard***
* ***--mixed***
* ***--soft***
#### HARD:
##### Working Dir = Staging Area = Repository
`git reset --hard [SHA commit]`
***Working Dir = Staging Area = Repository***
```sh
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]`
##### ~Despues de un cambio:~ add luego commit.
#### MIXED:
***Staging Area = Repository***
Working Dir a la espera de la iteracion basica (add, commit)
#### SOFT:
No afecta el working area?
`git reset --soft [SHA commit]`
##### Solo hay q hacer el commit para aplicar el cambio
Sirve para encapsular, por ejemplo: restear 5 commits para integrarlos en un solo commit
### CHECKOUT
##### "Ir a una version, deatached mode, permite generar una nueva rama(branch) a partir de este"
Al realizar otro **reset --mixed** a un **commit** de los que fueron encapsulados, se ignora el commit que los encapsula.
```sh
git reset --mixed [SHA commit]
# despues de un cambio: add luego commit
```
#### SOFT:
No afecta el working area?
```sh
git reset --soft [SHA commit]
# solo hay q hacer el commit para aplicar el cambio
```
### CHECKOUT
**Ir al modo 'deatached', permite generar una nueva rama(branch) a partir de este**
```bash
git chekout [SHA commit]
@ -108,16 +113,15 @@ git commit -m "--amend para sobreescribir el ultimo commit" --amend
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>**
git switch -c <nombre-de-nueva-rama>
O deshacer la operación con:
**git switch -**
git switch -
```
##### Cada ***commit tiene un parent*** .. "de que 'punto' viene"
***Cada commit tiene un parent*** .. de que 'punto' viene
## BRANCHES
------
##### linea alterna del repositorio
**Ramas o Lineas alternativas del repositorio**
Ver ramas: `git branches --list`
@ -134,59 +138,66 @@ 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"`
```sh
git commit -am "nuevo_commit"
##### Omitir preparación archivo
`git checkout -- "archivo"`
git checkout master # volver a la rama principal
### FUSIONAR ramas
##### (fusiona desde la rama actual, debes posicionarte en master)
git checkout "rama" # mover HEAD entre ramas
# omitir preparación archivo
git checkout -- "archivo"
```
### Fusionar ramas / Merge
***(fusiona desde la rama actual, debes posicionarte en master)***
`git merge "rama"`
#### SOLUCIONES de CONFLICTOS de FUSIONES:
##### -Fast-Forward -Manual Merge
**SOLUCIONES de CONFLICTOS de FUSIONES:**
* **-Fast-Forward**
* **-Manual Merge**
### REBASE
##### (desde la rama a realizar rebase)
##### añade los comits de la rama experimental delante de la rama master
##### posterior al REBASE (master) sigue en su último anterior commit
***(desde la rama a realizar rebase)***
Añade los comits de la rama experimental delante de la rama master,
posterior al REBASE (master) sigue en su último anterior commit
```bash
git rebase master
git checkout master
git merge "rama experimental"
```
----
## LOG
**Log STAT** explica con detalle nro. de lineas cambiadas
```sh
git log --stat
# log con DIFF
git log -p
# log por author
git shortlog
# otros
git log -2 # ver los últimos 2 commits
```
## 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:
**Filtros**
```bash
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
# busqueda por contenido de archivos
# muestra en que commit se creó
git log -S"búsqueda"
```
#### Log personalizado y alias
```bash
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"
@ -194,7 +205,7 @@ git config --global alias.lg2 "log --graph --decorate --format=format:'%C(bold b
```
### Git stash
##### guarda cambios en un estado termporal, no aplica cambios inmediatamente
Guarda cambios en un estado temporal, no aplica los cambios inmediatamente
```bash
git stash
git stash list
@ -204,21 +215,22 @@ git stash apply
`git help fetch`
### Git diff
##### muestra las diferencias hasta el punto en el este desde el commit indicado
`git diff 'commit id'
Muestra las diferencias desde el commit indicado hasta el punto en el que se encuentra el head
`git diff 'commit id'`
### Clonar Repositorio
`git clone [repos ssh o https]`
-----
## Llaves ssh
------
```sh
# listar llaves
ssh-add -l
# crear llave
ssh-keygen -t (algoritmo=rsa) -b (bits key) -C "comentario/mail"
##### Listar llaves
`ssh-add -l`
##### Crear una llave
##### SSH -t (algoritmo=rsa) -b (bits key) -C "comentario/mail"
```bash
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C "john@example.com"
ssh-keygen -t rsa -b 4096 -C "mail@git"
@ -231,7 +243,7 @@ ssh-add .ssh/[key_rsa]
cat .ssh/[key_rsa.pub]
```
### Manejo de Identidades git
### Manejo de identidades ssh
- Configuracion por archivo **~/.ssh/config**
```bash
@ -250,55 +262,55 @@ cat .ssh/[key_rsa.pub]
```bash
git config --local user.name "fuzan"
git config --local user.email "fuzan@email.net"
git config --local core.sshCommand "ssh -i ~/.ssh/keys/id_rsa -F /dev/null"
# Especificar llave
#..."From Git version 2.10.0, you can configure this per repo or globally,
# so you don't have to set the environment variable."...
git config --local core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
```
## Médotodos remotos tipícos
### Clonar repositorio (o https):
**Clonar** repositorio (ssh o https)
```sh
# Opcion para escificar llave
#..."From Git version 2.10.0, you can configure this per repo or globally,
# so you don't have to set the environment variable."...
git config --local core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git clone ssh://sshUsr@domino/usrRepo/Repo.git
git clone https://dominio/usrRepo/Repo.git
```
### Ver y eliminar vinculo con repositorio remoto
**Ver y eliminar vinculo** con repositorio remoto
```bash
git remote -v
git remote rm origin
```
### Crear nuevo repositorio remoto
**Crear** nuevo repositorio remoto
```sh
touch README.md
git init
#git config....
git add README.md
git commit -m "first commit"
git remote add origin sshUsr@host:RepoUsr/Repo.git
git push -u origin master
```
### Push repo local a remota
**ssh**
`git remote add origin sshUsr@192.8.8.8:88/usrRepo/repo.git`
**Push** repo local a remota
```sh
# ssh
git remote add origin sshUsr@192.8.8.8:88/usrRepo/repo.git`
**https**
`git remote add origin https://url:3000/usrRepo/repo.git`
`git push -u origin master`
# https
git remote add origin https://url:3000/usrRepo/repo.git`
git push -u origin master
```
## Git ignore
"Crear archivo .gitignore añadir archivo/carpeta/extension para ignorarlos
no guardar archivos sensibles, regex, ej. .*"
Crear archivo **.gitignore**, añadir *archivo/carpeta/extension* para ignorarlos.
Acepta regex, ej. **'*'**
```sh
ignorar_directorio/
dir2
dir2/
archivo_a_ignorar.txt
archivo2
*.pdf