• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Git at-zauber (initial steps)
 

Git at-zauber (initial steps)

on

  • 525 views

Introduction to git, as given at Zauber Labs

Introduction to git, as given at Zauber Labs

Statistics

Views

Total Views
525
Views on SlideShare
525
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Git at-zauber (initial steps) Git at-zauber (initial steps) Presentation Transcript

  • Git @ Zauber p r i m e r o s p a s o s
  • AgendaPrincipios FundamentalesWorkflows BásicosWorkflows AvanzadosReferencia
  • PrincipiosFundamentales
  • Historia del SCM Envia sus archivos Merge Manual Envia sus archivos Archivos SueltosFoo Bar
  • Historia del SCM Envia sus archivos Merge Manual Envia sus archivos Archivos SueltosFoo Bar Contras No hay historia El Merge es Manual
  • Historia del SCM Envia sus archivos Merge Manual Envia sus archivos Archivos SueltosFoo Bar Contras No hay historia El Merge es Manual
  • Historia del SCM Envia sus archivos Merge Manual Envia sus archivos Archivos SueltosFoo Bar Contras No hay historia El Merge es Manual
  • Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de PatchsFoo Bar
  • Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de PatchsFoo Bar ProsCon un Patch el merge es más fácil
  • Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de PatchsFoo Bar ProsCon un Patch el merge es más fácil
  • Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de PatchsFoo Bar Pros ContrasCon un Patch el merge es más No hay historia fácil Hay conflictos que no resuelve el merge
  • Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de PatchsFoo Bar Pros ContrasCon un Patch el merge es más No hay historia fácil Hay conflictos que no resuelve el merge
  • Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de PatchsFoo Bar Pros ContrasCon un Patch el merge es más No hay historia fácil Hay conflictos que no resuelve el merge
  • Historia del SCM Local VCS
  • Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge
  • Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge
  • Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge
  • Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge Contras Dificil Colaboración con otros
  • Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge Contras Dificil Colaboración con otros
  • Historia del SCM Centralized VCS
  • Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros
  • Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros
  • Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros
  • Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros
  • Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros Contras Single Point of Failure Necesita conexion con repositorio para versionar
  • Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros Contras Single Point of Failure Necesita conexion con repositorio para versionar
  • Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros Contras Single Point of Failure Necesita conexion con repositorio para versionar
  • Historia del SCM Distributed VCS
  • Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows
  • Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows
  • Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows
  • Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows
  • Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows Contras Más dificil de usar?
  • Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows Contras Más dificil de usar?
  • Git: Características
  • Git: CaracterísticasVCS Distribuido
  • Git: CaracterísticasVCS DistribuidoCasi todas las operaciones son locales
  • Git: CaracterísticasVCS DistribuidoCasi todas las operaciones son localesIntegridad (cada commit id es un checksumSHA)
  • Git: CaracterísticasVCS DistribuidoCasi todas las operaciones son localesIntegridad (cada commit id es un checksumSHA)Díficil de perder información
  • Git: CaracterísticasVCS DistribuidoCasi todas las operaciones son localesIntegridad (cada commit id es un checksumSHA)Díficil de perder informaciónGuarda Snapshots
  • Git: Características Snapshots, not Differences git Vs.others
  • Git: Características Snapshots, not Differences git Vs. Guarda delta de archivos, yothers construye la version x, aplicando todas las diferencias
  • Git: Características Snapshots, not Differences git Guarda snapshots de archivos modificados y links de archivos no modificados. Vs. Guarda delta de archivos, yothers construye la version x, aplicando todas las diferencias
  • Git: Características The Three States
  • Git: Características Cada archivo puede estaren 3 estados: commited,modified, staged The Three States
  • Git: Características Cada archivo puede estaren 3 estados: commited,modified, staged The Three States En el working copyviven los modified (yuntracked). Es donde se trabaja
  • Git: Características Cada archivo puede estaren 3 estados: commited, En staging viven losmodified, staged archivos marcados para The Three States el próximo commit En el working copyviven los modified (yuntracked). Es donde se trabaja
  • Git: Características Cada archivo puede estaren 3 estados: commited, En staging viven losmodified, staged archivos marcados para The Three States el próximo commit En el working copy En el repository,viven los modified (y viven los archivosuntracked). Es donde commited. se trabaja
  • Git: Características Cada archivo puede estaren 3 estados: commited, En staging viven losmodified, staged archivos marcados para The Three States el próximo commit En el working copy En el repository,viven los modified (y viven los archivosuntracked). Es donde commited. se trabaja Flujo básico:•checkout proyecto•hago cambios•stage files a comitear•commit de stagedfiles.
  • Git: Características Cada archivo puede estaren 3 estados: commited, En staging viven losmodified, staged archivos marcados para The Three States el próximo commit En el working copy En el repository,viven los modified (y viven los archivosuntracked). Es donde commited. se trabaja Importante! Flujo básico: Si agrego un archivo al•checkout proyecto stage, implica agregarlo•hago cambios tal cual esta.•stage files a comitear Si lo cambio después,•commit de staged esos cambios no van alfiles. commit, a menos que lo vuelva a agregar!
  • Workflows Básicos
  • Crear un Repo Local git init (crea un repo git local para un directorio) $ mkdir myrepo $ cd myrepo $ git init Initialized empty Git repository in /Users/cono/myrepo/.git/ Crea un directorio .git con un repo vacio.A diferencia de SVN, solo existe un directorio .git por proyecto
  • Clonar un Repo Remoto git clone (crea un repo local git que es una copia del repo remoto especificado) $ git clone git@github.com:zaubersoftware/git-connector.git Cloning into git-connector... remote: Counting objects: 200, done. remote: Compressing objects: 100% (106/106), done. remote: Total 200 (delta 38), reused 102 (delta 11) Receiving objects: 100% (200/200), 49.25 KiB, done. Resolving deltas: 100% (38/38), done.git soporta diferentes transportes: ssh, http, git, file.
  • Staging Area
  • Staging AreaRegistra los archivos a incluir en el próximocommit.
  • Staging AreaRegistra los archivos a incluir en el próximocommit.Se limpia al realizar un commit
  • Staging AreaRegistra los archivos a incluir en el próximocommit.Se limpia al realizar un commitGuarda el snapshot del archivo al momentoen que fue agregado al staging area. (cambiosposteriores no son incluidos, a menos que seagregue otra vez)
  • Add Files to StageA medida que realizo cambios, puedo irmarcando archivos (y su estado) para serincluidos en el próximo commit$ git status# Untracked files:# (use "git add <file>..." to include in what will be committed)## a$ git add a$ git status# Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: a
  • Add Files to StageA medida que realizo cambios, puedo irmarcando archivos (y su estado) para serincluidos en el próximo commit Muestra archivos: • A commitear (index)$ git status • Tracked con cambios# Untracked files: • Untracked# (use "git add <file>..." to include in what will be committed)## a$ git add a$ git status# Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: a
  • Add Files to StageA medida que realizo cambios, puedo irmarcando archivos (y su estado) para serincluidos en el próximo commit Muestra archivos: • A commitear (index)$ git status • Tracked con cambios# Untracked files: • Untracked# (use "git add <file>..." to include in what will be committed)## a Agregamos un archivo al index. Es$ git add a decir lo agregamos al próximo commit$ git status# Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: a
  • Add Files to StageA medida que realizo cambios, puedo irmarcando archivos (y su estado) para serincluidos en el próximo commit Muestra archivos: • A commitear (index)$ git status • Tracked con cambios# Untracked files: • Untracked# (use "git add <file>..." to include in what will be committed)## a Agregamos un archivo al index. Es$ git add a decir lo agregamos al próximo commit$ git status# Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: a Ahora a esta registrado para el próximo commit
  • Add Files to StageSi después de hacer add, cambiamos elarchivo, git recuerda la primera version$ echo “un cambio” > a$ git status# Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: a## Changed but not updated:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in workingdirectory)## modified: a
  • Add Files to StageSi después de hacer add, cambiamos elarchivo, git recuerda la primera version$ echo “un cambio” > a$ git status# Changes to be committed:# (use "git rm --cached <file>..." to unstage)# Primera version de a. Lo que se# new file: a va a comitear## Changed but not updated:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in workingdirectory)## modified: a
  • Add Files to StageSi después de hacer add, cambiamos elarchivo, git recuerda la primera version$ echo “un cambio” > a$ git status# Changes to be committed:# (use "git rm --cached <file>..." to unstage)# Primera version de a. Lo que se# new file: a va a comitear## Changed but not updated:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in workingdirectory)# Cambios posteriores. No van al# modified: a commit
  • Move, Rename, Reset & Checkout Move y Rename funcionan de forma similar $ git mv a a.old $ git rm a.old unstage un archivo (mantiene los cambios en la working copy) $ git reset HEAD a.old Borrar modificaciones locales (dangerous!) $ git checkout aTIP git status te muestra como hacer estos comandos
  • Repository Commit
  • Repository CommitSe genera a partir de los snapshots del stagingarea
  • Repository CommitSe genera a partir de los snapshots del stagingareaTodos los commit son locales.
  • Repository CommitSe genera a partir de los snapshots del stagingareaTodos los commit son locales.Es una estructura que contiene: snapshots dearchivos comiteados, puntero al commitanterior, metadata.
  • Commit Staged Al hacer git commit, versionamos los cambios del staging area en el repo local (commit) $ git commit -m”primeros cambios de a” [master (root-commit) 8536b60] primeros cambios 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 aRecordar que el commit es a nuestro repo local!!
  • Commit StagedPodemos hacer un git add y commit, de losarchivos que están tracked, de forma simplecon:$ echo “hola” > b$ git status# Changed but not updated:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in workingdirectory)## modified: a## Untracked files:# (use "git add <file>..." to include in what will be committed)## b$ git commit -a -m”commit de a y no de b”
  • Commit StagedPodemos hacer un git add y commit, de losarchivos que están tracked, de forma simplecon:$ echo “hola” > b$ git status# Changed but not updated:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in workingdirectory)# Tracked: a# modified: a Untracked: b## Untracked files:# (use "git add <file>..." to include in what will be committed)## b$ git commit -a -m”commit de a y no de b”
  • Commit StagedPodemos hacer un git add y commit, de losarchivos que están tracked, de forma simplecon:$ echo “hola” > b$ git status# Changed but not updated:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in workingdirectory)# Tracked: a# modified: a Untracked: b## Untracked files:# (use "git add <file>..." to include in what will be committed)## b Hace un add de$ git commit -a -m”commit de a y no de b” “a” y commit
  • Reviewing your ChangesPara ver los cambios en la working copy perono en staging $ git diff # Muestra el diff entre la working copy y la staging areaPara ver los cambios entre la staging area y elrepositorio (el próximo commit) $ git diff --staged # Muestra el diff entre la staging area y el HEAD del repositorio
  • Commit HistoryPara ver la historia de commits. (git log tienemuchas opciones, mirar!) $ git log commit 204359a005f459908b1304a77cced78deda1601e Author: Mariano A. Cortesi <mariano@zaubersoftware.com> Date: Fri Apr 8 20:26:33 2011 -0300 cambios de a commit 8536b60ca6f7a5256e4778b27b6346393f36d9f3 Author: Mariano A. Cortesi <mariano@zaubersoftware.com> Date: Fri Apr 8 17:54:27 2011 -0300 primeros cambios
  • Commit HistoryPara ver la historia de commits. (git log tienemuchas opciones, mirar!) $ git log El id de un commit 204359a005f459908b1304a77cced78deda1601e commit es su SHA Author: Mariano A. Cortesi <mariano@zaubersoftware.com> Date: Fri Apr 8 20:26:33 2011 -0300 cambios de a commit 8536b60ca6f7a5256e4778b27b6346393f36d9f3 Author: Mariano A. Cortesi <mariano@zaubersoftware.com> Date: Fri Apr 8 17:54:27 2011 -0300 primeros cambios
  • Branches
  • BranchesTodo commit esta asociado a un branch
  • BranchesTodo commit esta asociado a un branchExisten remote branches y local branches
  • BranchesTodo commit esta asociado a un branchExisten remote branches y local branchesEn los remote branches no se puede hacercommit, son una referencia a un branch de unrepositorio remoto
  • BranchesTodo commit esta asociado a un branchExisten remote branches y local branchesEn los remote branches no se puede hacercommit, son una referencia a un branch de unrepositorio remotoEl branch default es master (en terminos desvn sería trunk). Se crea en el clone o init.
  • Branches
  • BranchesEs un puntero al último commit del branch.
  • BranchesEs un puntero al último commit del branch.HEAD es un puntero al branch de la workingcopy.
  • Local Branches$ git branch testing$ git checkout testing
  • Local Branches$ git branch testing Importante! Notar como cada commit apunta a su padre.$ git checkout testing
  • Local Branches branch master. puntero al último$ git branch testing commit del branch Importante! Notar como cada commit apunta a su padre.$ git checkout testing
  • Local Branches puntero a la branch del working copy branch master. puntero al último$ git branch testing commit del branch Importante! Notar como cada commit apunta a su padre.$ git checkout testing
  • Local Branches puntero a la branch Crea un branch. No del working copycambia el working copy branch master. puntero al último $ git branch testing commit del branch Importante! Notar como cada commit apunta a su padre. $ git checkout testing
  • Local Branches puntero a la branch Crea un branch. No del working copycambia el working copy branch master. puntero al último $ git branch testing commit del branch Al crear un Importante! branch se crea un Notar como cada nuevo puntero commit apunta a su padre. $ git checkout testing
  • Local Branches puntero a la branch Crea un branch. No del working copycambia el working copy branch master. puntero al último $ git branch testing commit del branch Al crear un Importante! branch se crea un Notar como cada nuevo puntero Cambia el working commit apunta a sucopy. Lo apunta al padre.branch testing $ git checkout testing
  • Local Branches puntero a la branch Crea un branch. No del working copycambia el working copy branch master. puntero al último $ git branch testing commit del branch Al crear un Importante! branch se crea un Notar como cada nuevo puntero Cambia el working commit apunta a sucopy. Lo apunta al padre.branch testing $ git checkout testing el checkout cambia el puntero HEAD
  • Branch Merging Fast Forward Cuando el merge solo implica mover un puntero$ git checkout master$ git merge hotfixUpdating f42c576..3a0874cFast forward README | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
  • Branch Merging Fast Forward Cuando el merge solo implica mover un puntero Me paro en el branch adonde quiero mergear$ git checkout master$ git merge hotfixUpdating f42c576..3a0874cFast forward README | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
  • Branch Merging Fast Forward Cuando el merge solo implica mover un puntero Me paro en el branch adonde quiero mergear$ git checkout master$ git merge hotfixUpdating f42c576..3a0874cFast forward README | 1 - Indico el branch que quiero mergear 1 files changed, 0 insertions(+), 1 deletions(-)
  • Branch Merging Fast Forward Cuando el merge solo implica mover un puntero El merge consistió en Me paro en el branch mover el puntero master adonde quiero mergear$ git checkout master$ git merge hotfixUpdating f42c576..3a0874cFast forward README | 1 - Indico el branch que quiero mergear 1 files changed, 0 insertions(+), 1 deletions(-)
  • Branch Merging Se parte de un ancestro comúnThree way merge y se aplican los cambios
  • Branch Merging Se parte de un ancestro comúnThree way merge y se aplican los cambios Commit con 2 padres
  • Branch Merging Se parte de un ancestro comúnThree way merge y se aplican los cambios Commit con 2 padres Si hubo conflictos en el merge. Deben resolverse en el working copy
  • Rebase Branch merge master experiment$ git checkout experiment$ git rebase master rebaseFirst, rewinding head to replay your work ontop of it...Applying: added staged command
  • Rebase Branch 1. Queremos incluiren nuestro branch los mergecambios del master master experiment $ git checkout experiment $ git rebase master rebase First, rewinding head to replay your work on top of it... Applying: added staged command
  • Rebase Branch 1. Queremos incluiren nuestro branch los mergecambios del master master experiment 2. Calcula el patch de cada commit de experiment $ git checkout experiment $ git rebase master rebase First, rewinding head to replay your work on top of it... Applying: added staged command
  • Rebase Branch 1. Queremos incluiren nuestro branch los mergecambios del master master experiment 2. Calcula el patch de cada commit de experiment $ git checkout experiment $ git rebase master rebase First, rewinding head to replay your work on top of it... Applying: added staged command 3. Aplico los patchs sobre master. uno por uno
  • Rebase Branch 1. Queremos incluiren nuestro branch los mergecambios del master master experiment 2. Calcula el patch de cada commit de experiment $ git checkout experiment $ git rebase master rebase First, rewinding head to replay your work on top of it... Applying: added staged command Importante!! Genera nuevos commits. No usar con commits pusheados 3. Aplico los patchs sobre master. uno por uno
  • Remote Repositories
  • Remote RepositoriesPodemos tener más de un remote repository
  • Remote RepositoriesPodemos tener más de un remote repositoryAl hacer clone, se define el repositorio remotoorigin. (es un alias, se puede cambiar)
  • Remote RepositoriesPodemos tener más de un remote repositoryAl hacer clone, se define el repositorio remotoorigin. (es un alias, se puede cambiar)Un remote branch es una referencia de unbranch local de un repositorio remoto.
  • Remote RepositoriesPodemos tener más de un remote repositoryAl hacer clone, se define el repositorio remotoorigin. (es un alias, se puede cambiar)Un remote branch es una referencia de unbranch local de un repositorio remoto.Tracking Branch: es una local branchrelacionada a un remote branch. (“la sigue” ypuede “actualizarla”). En el clone, master secrea como tracking branch de origin/master.
  • Remote Repositoriesgit fetch trae toda la información de unrepositorio remoto (commits, branchs, tags).Actualiza los remote branches (no realiza unmerge) $ git fetch From https://git.zaubersoftware.com/zauber/bob b2ed962..982359c master -> origin/masterSi quiere hacer un merge + fetch (trackingbranches): $ git pull From https://git.zaubersoftware.com/zauber/bob b2ed962..982359c master -> origin/master
  • Remote RepositoriesPara crear un branch en base un remotebranch (y activar el tracking) [c/ checkout] $ git checkout --track origin/serverfix Branch serverfix set up to track remote branch refs/remotes/ origin/serverfix. Switched to a new branch "serverfix"git push envía los cambios de un local branch alrepositorio remoto. Se trata de un merge quesolo puede ser fast forward. $ git push origin master $ git push
  • Remote RepositoriesPara crear un branch en base un remotebranch (y activar el tracking) [c/ checkout] $ git checkout --track origin/serverfix Branch serverfix set up to track remote branch refs/remotes/ origin/serverfix. Switched to a new branch "serverfix"git push envía los cambios de un local branch alrepositorio remoto. Se trata de un merge quesolo puede ser fast forward. $ git push origin master $ git push solo tracking branches
  • Tags (Local and Shared)Es un puntero a un commitlistar los tags$ git tagv0.1v1.3crear un tag$ git tag -a v1.4 -m my version 1.4$ git tag -a v1.2 9fceb02subir tags a un remote$ git push origin v1.5$ git push origin --tags
  • WorkflowsAvanzados
  • Embrace Branches A diferencias de otros VCC, crear branches es un proceso liviano que probablemente hagamos todos los días. Implica un cambio de concepto
  • Embrace BranchesUn branch para cada story. branch: story-567 A diferencias de otros VCC, crear branches es un proceso liviano que probablemente hagamos todos los días. Implica un cambio de concepto
  • Embrace Branches Un branch para cada issue.Un branch para cada story. branch: issue-9596 branch: story-567 A diferencias de otros VCC, crear branches es un proceso liviano que probablemente hagamos todos los días. Implica un cambio de concepto
  • Embrace Branches Un branch para cada issue.Un branch para cada story. branch: issue-9596 branch: story-567 A diferencias de otros VCC, crear branches es un proceso liviano que probablemente hagamos todos los días. Implica un cambio de concepto Un branch para feature.branch: feature-fb-connect
  • Embrace Branches Un branch para cada issue.Un branch para cada story. branch: issue-9596 branch: story-567 A diferencias de otros VCC, crear branches es un proceso liviano que probablemente hagamos todos los días. Implica un cambio de concepto Un branch para feature.branch: feature-fb-connect Un branch para probar una idea. branch: cono-idea-loca
  • Stash for later¿Que pasa si quiero cambiar de branch y tengo cambios en mi working copy?
  • Stash for later¿Que pasa si quiero cambiar de branch y tengo cambios en mi working copy? STASH IT!
  • Stash for later ¿Que pasa si quiero cambiar de branch y tengo cambios en mi working copy? STASH IT!$ git stash Saved working directory and index state Saves Working "WIP on master: 049d078 added the index file" Copy & StagingHEAD is now at 049d078 added the index file Area(To restore them type "git stash apply")
  • Stash for later ¿Que pasa si quiero cambiar de branch y tengo cambios en mi working copy? STASH IT!$ git stash Saved working directory and index state Saves Working "WIP on master: 049d078 added the index file" Copy & StagingHEAD is now at 049d078 added the index file Area(To restore them type "git stash apply")$ git stash apply Applies Stashed ... data to current working copy
  • Amend Fucked Commits¿Que pasa si hice mal el último commit ?
  • Amend Fucked Commits¿Que pasa si hice mal el último commit ? Amend Commit
  • Amend Fucked Commits ¿Que pasa si hice mal el último commit ? Amend Commit1. Hace los cambios en el staging area
  • Amend Fucked Commits ¿Que pasa si hice mal el último commit ? Amend Commit1. Hace los cambios 2. git commit --amend en el staging area
  • Amend Fucked Commits ¿Que pasa si hice mal el último commit ? Amend Commit1. Hace los cambios 3. Cambia el 2. git commit --amend en el staging area mensaje de commit
  • Rewrite historySquash Commits Nos permite juntar commits$ git rebase -i HEAD~3 pick f7f3f6d changed my name a bit squash 310154e updated README formatting and added blame squash a5f4a0d added cat-file
  • Rewrite historySquash Commits Nos permite juntar commits 1. Hacemos un$ git rebase -i HEAD~3 rebase interactivo de los últimos 3 commits pick f7f3f6d changed my name a bit squash 310154e updated README formatting and added blame squash a5f4a0d added cat-file
  • Rewrite history Squash Commits Nos permite juntar commits 1. Hacemos un $ git rebase -i HEAD~3 rebase interactivo de los últimos 3 commits 2. Seleccionamos la pick f7f3f6d changed my name a bitopción squash para los squash 310154e updated README formatting and added blameque queremos hacer squash a5f4a0d added cat-file desparecer
  • Rewrite history Filter Branch Nos permite hacer operaciones sobre cada commit$ git filter-branch --tree-filter rm -f passwords.txt HEADRewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd(21/21)Ref refs/heads/master was rewritten
  • Rewrite history Filter Branch Nos permite hacer operaciones sobre cada commit$ git filter-branch --tree-filter rm -f passwords.txt HEADRewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd Borramos el archivo(21/21) passwords.txt del repoRef refs/heads/master was rewritten
  • Two commits, one Working Copy¿Que pasa si necesito 2 commits de un archivo?
  • Two commits, one Working Copy¿Que pasa si necesito 2 commits de un archivo? Partial Staging!
  • Two commits, one Working Copy¿Que pasa si necesito 2 commits de un archivo? Partial Staging!1. git add -p
  • Two commits, one Working Copy¿Que pasa si necesito 2 commits de un archivo? Partial Staging! 2. Elegir los diffs1. git add -p chunks a incluir
  • Two commits, one Working Copy¿Que pasa si necesito 2 commits de un archivo? Partial Staging! 2. Elegir los diffs1. git add -p 3. Commit del stage chunks a incluir
  • Two commits, one Working Copy ¿Que pasa si necesito 2 commits de un archivo? Partial Staging! 2. Elegir los diffs 1. git add -p 3. Commit del stage chunks a incluirgit add -i nos permite hacer esto y staging interactivo
  • Referencia
  • Referenciagit help (man pages para todos los comandos)Wiki Zauber (proximamente)Pro Git (http://progit.org/book/)Community Book (http://book.git-scm.com/)
  • Gracias!Preguntas?