This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<- Volver al repositorio - siguente -> Remotos / Workflow
Hoja de comandos basicos git
Indice
- Instalación
- Crear Repositorio (directorio local)
- Git-Reset
- Checkout
- status-log-config
- Branches(Ramas)
- Log
- Alias - Stash - Diff - Fetch
- Trabajando con repositorios remotos:
- Llaves ssh
- Git Ignore
- Referencias
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"
# Lista de configuracion
git config --global --list
git config --local --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)
# Remove a file from the workspace and the index
git rm file(s)...
git commit -m "mensaje"
# add -A + Commit
git commit -am "mensaje"
git commit -m "--amend para sobreescribir el ultimo commit" --amend
HEAD : indica el commit en el cual esta situado el puntero de git
Otros
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
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)
Sirve para encapsular, por ejemplo: restear 5 commits para integrarlos en un solo commit
Al realizar otro reset --mixed a un commit de los que fueron encapsulados, se ignora el commit que los encapsula.
git reset --mixed [SHA commit]
# despues de un cambio: add luego commit
SOFT:
No afecta el working area?
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
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
Ramas o Lineas alternativas del repositorio
Ver ramas: git branches --list
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"
git checkout master # volver a la rama principal
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
Fusionar solo 1 archivo entre ramas
# especificar la rama desde donde se fusionara el archivo
# estando posicionado en la rama donde se realiza la fusión
git checkout -p <rama> </ruta/al/archivo>
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
git rebase master
git checkout master
git merge "rama experimental"
LOG
Log STAT explica con detalle nro. de lineas 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ó
git log -S"búsqueda"
Log personalizado y alias
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 temporal, no aplica los cambios inmediatamente
git stash
git stash list
git stash apply
Git fetch
git help fetch
Git diff
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
# listar llaves
ssh-add -l
# crear llave
ssh-keygen -t (algoritmo=rsa) -b (bits key) -C "comentario/mail"
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C "john@example.com"
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]
Manejo de identidades ssh
- Configuracion por archivo ~/.ssh/config
ej. al agregar repositorio remoto, usar host en comando:Host gitfuzan Hostname jpdev.kickto.net User fuzan IdentityFile ~/.ssh/keys/id_rsa PasswordAuthentication no Port 22
git remote add origin ssh://git@gitfuzan/jp.av.dev/basicos_git.git
- Configuración por directorio (repositorio)
git config --local user.name "fuzan" git config --local user.email "fuzan@email.net" # 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"
- Identidad en cache (login https) doc
git config --local credential.helper git config --local credential.helper 'cache --timeout=3600'
Flujo de trabajo remoto tipíco
Clonar repositorio (ssh o https)
git clone ssh://sshUsr@domino/usrRepo/Repo.git
git clone https://dominio/usrRepo/Repo.git
Ver y eliminar vinculo con repositorio remoto
git remote -v
git remote rm origin
Crear nuevo repositorio remoto
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`
# 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.
Acepta regex, ej. '*'
ignorar_directorio/
dir2/
archivo_a_ignorar.txt
archivo2
*.pdf
📌️ Docs, Referencias...
<- Volver al repositorio - siguente -> Remotos / Workflow