21 Comandos Basicos Git
jp.av.dev edited this page 2022-03-26 20:02:32 -03:00
This file contains invisible Unicode characters

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


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
    Host gitfuzan
      Hostname jpdev.kickto.net
      User fuzan
      IdentityFile ~/.ssh/keys/id_rsa
      PasswordAuthentication no
      Port 22
    
    ej. al agregar repositorio remoto, usar host en comando:
    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