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 --list

GIT 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 --all

GIT 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 short

GIT 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 fetch

GIT 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 push

GIT 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 fetch

GIT 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 .gitignore

Remover files de GIT

 

 

 

comiteamos

$ git rm <FILE>
$ git commit -a

STASHING

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 pop

STASHING (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