GIT
Overview
Lucas Campana Levy

GIT Basics
VCS (Version Control System)
- Mecanismo de merging
- Versionado de cambios
- CVS, SVN, Perforce, ClearCase, Harvest, TFS, GIT
GIT Basics
Repositorios centralizados vs Repositorios Distribuidos
- Cada uno tiene una copia del repositorio completa
- Commits mas rápidos
- Trabajo offline
GIT Basics
Que es GIT?
- DVCS (Distributed Version Control System)
- Linux Kernel Project
- Distribuido, rápido, más natural y capaz de manejar grandes proyectos.
GIT Basics
- GitHub
- Bitbucket
GIT Basics
Install GIT
- Windows
https://git-scm.com/downloads
git bash (CLI)
- Linux
sudo apt-get install git
sudo yum install git
GIT Config
Setea usuario para el repo actual
Setea mail para el repo actual
Setea a nivel global el color en la consola
Muestra una lista con las configuraciones del repositorio
$ git config user.name "Lucas Campana Levy"$ git config user.mail "lcampana@cablevision.com.ar"$ git config --global color.ui true $ git config --listGIT Commands
Initializa un repositorio vacío en un directorio de forma "local"
Esto chequea que cambio desde el último commit
$ git help$ git init$ git status$ git help <COMMAND>GIT ADD
Agrega uno o una lista de files
Agrega todos los files
Agrega los txt del directorio especificado
Agrega todos los txt del proyecto
$ git add <FILE> <FILE> <FILE>$ git add --all$ git add *.txt$ git add .$ git add <path>/<file>.<ext>$ git add "*.txt"GIT COMMIT
Realiza un commit de forma local en "master", crea un snapshot en nuestro timeline
Este shorcut nos permite agregar los files al estado staged solo los existentes no lo no trackeados (nuevos) y comitear al mismo tiempo
$ git commit -m "Descripcion del commit"$ git commit -am "Descripcion"GIT LOG
Nos muestra el historico de nuestros commits con un SHA number y descripcion
Imprime los logs con el formato que le definamos
Imprime los logs historicos con los cambios hechos en cada commit
Imprime los logs historicos con los agregados y borrados de cada commit
Imprime los logs historicos con grafica de merges y branches de cada commit
Git lol
$ git log$ git log --pretty=format:"%h %ad- %s [%an]"
$ git log --oneline -p$ git log --oneline --stat
$ git log --oneline --graph
$ git log --graph --decorate --pretty=oneline --abbrev-commit --allGIT DIFF
Nos muestra las diferencias entre los files en staged
Nos muestra las diferencias de un commit hacia atrás
Nos muestra las diferencias de dos commit hacia atrás
Nos muestra las diferencias de cinco commit hacia atrás
Diferencias del segundo commit mas reciente contra el mas reciente
Nos muestra las diferencias entre un rango de SHA numbers
Nos muestra las diferencias entre 2 branches
$ git diff --staged$ git diff HEAD^$ git diff HEAD^^$ git diff HEAD~5$ git diff HEAD^..HEAD
$ git diff <SHA_NUMBER>..<SHA_NUMBER>$ git diff <BRANCH_NAME> <BRANCH_NAME>GIT BLAME
Nos muestra todos los cambios realizados en un determinado file con autor, fecha, hash, linea
$ git blame <FILE> --date shortGIT RESET
Resetea todos los files que esten en estado staged a nuestro último commit
Deshace el ultimo commit antes del HEAD osea a la instancia anterior y deja los cambios en staging
Deshace el ultimo commit antes del HEAD y deshace todos los cambios
Deshace los ultimos dos commits y deshace todos los cambios
$ git reset HEAD .$ git reset --soft HEAD^$ git reset --hard HEAD^$ git reset --hard HEAD^^
GIT FETCH
Sincroniza los files de nuestro local contra los origenes remotos
$ git fetchGIT REMOTE
Agrega una direccion remota para nuestro repositorio, ya que podemos agregar multiples origenes
Muestra los repositorios remotos pull/push
Muestra todos los origenes locales, remotos, sus branches y si estan actualizados tanto para pull/push
Para remover un repositorio remoto
Para limpiar los branches que otro usuario pudo haber removido y quedaron huerfanos
$ git remote add <ORIGIN_NAME> <ORIGIN_URL>$ git remote -v $ git remote show <ORIGIN_NAME>$ git remote rm <ORIGIN_NAME>$ git remote prune <ORIGIN_NAME>GIT PUSH
Pushea o sube los cambios comiteados tanto al repositorio local como a los origenes remotos
Para pushear los cambios de nuestro branch local al origen remoto
Borra el branch remoto
$ git push$ git push <ORIGIN_NAME> <BRANCH_NAME>$ git push <ORIGIN_NAME> :<BRANCH_NAME>
GIT PULL
Para traernos los cambios del repositorio remoto
1. Hace un Sync de los files
$ git fetch
2. Hace un merge entre nuestro branch y nuestro origen de datos
$ git merge <ORIGIN>/<BRANCH>
$ git pull $ git pull --rebase
GIT CLONE
1. Clona los files de un determinado repositorio en un path local
2. Agrega el "origin" remoto apuntando a la url a la que clonamos
3. Hace un checkout de nuestro branch inicial normalmente master y setea el HEAD
$ git clone <REPO_URL> <LOCAL_NAME>GIT CHECKOUT
Nos posiciona o switchea a el branch deseado
Crea un branch y nos posiciona en el mismo
$ git checkout <BRANCH_NAME>$ git checkout -b <BRANCH_NAME>GIT MERGE
Mergea los cambios entre el el branch en el que nos encontramos posicionados y el branch que especificamos
- Si no hay cambios en el master mergea en modo 'fast-forward'
- En caso de haber cambios y no haber conflictos mergea en modo 'recursive'
- En caso de haber conflicto entre los files que queremos mergear deberemos resolver los conflictos manualmente y comitear y pushear nuestros cambios
$ git merge <BRANCH_NAME>$ git commit -a
git pushGIT REBASE
Antes de un rebase debemos sincronnizar nuestro repo
1. Mueve todos los cambios de nuestro local a un area temporal, no los origenes remotos
2. Ejecuta todos los commits del origen remoto uno por uno
3. Por ultimo corre todos los commits de nuestra area temporal uno a la vez
En caso de haber conflictos se debera resolver los conflictos manualmente y hacer un
$ git rebase$ git -a rebase --continue$ git fetchGIT BRANCH
Nos sirve para saber en que branch nos encontramos
Lista todos los branches remotos
Crea un nuevo branch local
Eliminamos el branch local
Forzamos el borrado del branch local
$ git branch$ git branch -D <BRANCH_NAME>$ git branch -r$ git branch <BRANCH_NAME>$ git branch -d <BRANCH_NAME>
GIT TAG
Nos lista todos los tags
Hace un checkout de la version solicitada localmente y nos posiciona el HEAD en el mismo
Agrega un nuevo tag al repositorio
Para pushear nuestros tags a nuestros origenes remotos
$ git tag$ git checkout <TAG_VERSION>
$ git tag -a <TAG_NAME> -m "descripcion del tag"
$ git push --tags
Excluir files de GIT
Podemos excluir files de dos maneras diferentes agreagandolos al
o agregando a nuestro proyecto un
echo "" > .gitignore
y agregando los paths y files que no queramos incluir en nuestros commits
./git/info/exclude $ git add .gitignoreRemover files de GIT
comiteamos
$ git rm <FILE>$ git commit -aSTASHING
Salva los cambios que hayamos realizado en un stack temporal con los files untracked
Muestra la lista de cambios guardados en el stack temporal
Muestra la lista de cambios guardados en el stack temporal con mas detalles podemos utilizar cualquier opcion de log para facilitarnos el detalle
Muestra el detalle de los cambios guardados de un determinado stash, tambien puede tomar cualquier opcion del log
Aplica el stash temporal a nuestra area de trabajo
$ git stash save -u "description with a message to save"
$ git stash list$ git stash list --stats$ git stash show <STASH_NAME> --patch
$ git stash apply <STASH_NAME>STASHING (II)
Descarta el stash
Borra todos los stash del stack
Aplica el primer stash del stack y lo saca de la pila
$ git stash drop <STASH_NAME>$ git stash clear$ git stash popSTASHING (Conflictos)
Tambien podemos entrar en coflictos al tratar de aplicar
un stash por lo que deberemos realizar un hard reset
aplicar nuestros cambios
y comitearlos
$ git commit -am "description"$ git reset --hard HEAD
$ git stash apply
STASHING (BRANCHING)
Supongamos que alguien borro un branch
podemos restaurar un branch desde el stash
y comiteamos
$ git commit -am "description"$ git branch -d <BRANCH_NAME>$ git stash branch <BRANCH_NAME> <STASH_NAME>
GIT
By lukebell
GIT
- 213