SlideShare uma empresa Scribd logo
1 de 142
Git @ Zauber
 p r i m e r o s   p a s o s
Agenda

Principios Fundamentales

Workflows Básicos

Workflows Avanzados

Referencia
Principios
Fundamentales
Historia del SCM
       Envia sus archivos         Merge Manual


      Envia sus archivos                         Archivos Sueltos
Foo                         Bar
Historia del SCM
       Envia sus archivos            Merge Manual


      Envia sus archivos                            Archivos Sueltos
Foo                          Bar




                                   Contras

                              No hay historia

                            El Merge es Manual
Historia del SCM
       Envia sus archivos            Merge Manual


      Envia sus archivos                            Archivos Sueltos
Foo                          Bar




                                   Contras

                              No hay historia

                            El Merge es Manual
Historia del SCM
       Envia sus archivos            Merge Manual


      Envia sus archivos                            Archivos Sueltos
Foo                          Bar




                                   Contras

                              No hay historia

                            El Merge es Manual
Historia del SCM
       Envia sus patchs         Merge Semi Automático


      Envia sus patchs                              Pasaje de Patchs
Foo                       Bar
Historia del SCM
       Envia sus patchs         Merge Semi Automático


      Envia sus patchs                              Pasaje de Patchs
Foo                       Bar




               Pros
Con un Patch el merge es más
           fácil
Historia del SCM
       Envia sus patchs         Merge Semi Automático


      Envia sus patchs                              Pasaje de Patchs
Foo                       Bar




               Pros
Con un Patch el merge es más
           fácil
Historia del SCM
       Envia sus patchs         Merge Semi Automático


      Envia sus patchs                              Pasaje de Patchs
Foo                       Bar




               Pros                                        Contras
Con 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 Patchs
Foo                       Bar




               Pros                                        Contras
Con 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 Patchs
Foo                       Bar




               Pros                                        Contras
Con 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ísticas
VCS Distribuido
Git: Características
VCS Distribuido

Casi todas las operaciones son locales
Git: Características
VCS Distribuido

Casi todas las operaciones son locales

Integridad (cada commit id es un checksum
SHA)
Git: Características
VCS Distribuido

Casi todas las operaciones son locales

Integridad (cada commit id es un checksum
SHA)

Díficil de perder información
Git: Características
VCS Distribuido

Casi todas las operaciones son locales

Integridad (cada commit id es un checksum
SHA)

Díficil de perder información

Guarda Snapshots
Git: Características
                       Snapshots, not
                        Differences
   git



              Vs.



others
Git: Características
                         Snapshots, not
                          Differences
   git



              Vs.


                        Guarda delta de archivos, y
others                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, y
others                construye la version x, aplicando
                       todas las diferencias
Git: Características
              The Three States
Git: Características
 Cada archivo puede estar
en 3 estados: commited,
modified, staged             The Three States
Git: Características
 Cada archivo puede estar
en 3 estados: commited,
modified, staged             The Three States

  En el working copy
viven los modified (y
untracked). Es donde
 se trabaja
Git: Características
 Cada archivo puede estar
en 3 estados: commited,      En staging viven los
modified, staged             archivos marcados para   The Three States
                            el próximo commit


  En el working copy
viven los modified (y
untracked). Es donde
 se trabaja
Git: Características
 Cada archivo puede estar
en 3 estados: commited,      En staging viven los
modified, staged             archivos marcados para   The Three States
                            el próximo commit


  En el working copy                                       En el repository,
viven los modified (y                                      viven los archivos
untracked). Es donde                                      commited.
 se trabaja
Git: Características
 Cada archivo puede estar
en 3 estados: commited,      En staging viven los
modified, staged             archivos marcados para   The Three States
                            el próximo commit


  En el working copy                                       En el repository,
viven los modified (y                                      viven los archivos
untracked). Es donde                                      commited.
 se trabaja



 Flujo básico:
•checkout proyecto
•hago cambios
•stage files a comitear
•commit de staged
files.
Git: Características
 Cada archivo puede estar
en 3 estados: commited,      En staging viven los
modified, staged             archivos marcados para   The Three States
                            el próximo commit


  En el working copy                                       En el repository,
viven los modified (y                                      viven los archivos
untracked). 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 al
files.                                                     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 Area
Registra los archivos a incluir en el próximo
commit.
Staging Area
Registra los archivos a incluir en el próximo
commit.

Se limpia al realizar un commit
Staging Area
Registra los archivos a incluir en el próximo
commit.

Se limpia al realizar un commit

Guarda el snapshot del archivo al momento
en que fue agregado al staging area. (cambios
posteriores no son incluidos, a menos que se
agregue otra vez)
Add Files to Stage
A medida que realizo cambios, puedo ir
marcando archivos (y su estado) para ser
incluidos 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 Stage
A medida que realizo cambios, puedo ir
marcando archivos (y su estado) para ser
incluidos 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 Stage
A medida que realizo cambios, puedo ir
marcando archivos (y su estado) para ser
incluidos 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 Stage
A medida que realizo cambios, puedo ir
marcando archivos (y su estado) para ser
incluidos 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 Stage
Si después de hacer add, cambiamos el
archivo, 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 working
directory)
#
#	

 modified: a
Add Files to Stage
Si después de hacer add, cambiamos el
archivo, 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 working
directory)
#
#	

 modified: a
Add Files to Stage
Si después de hacer add, cambiamos el
archivo, 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 working
directory)
#
                           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 a


TIP git status te muestra como hacer estos comandos
Repository Commit
Repository Commit
Se genera a partir de los snapshots del staging
area
Repository Commit
Se genera a partir de los snapshots del staging
area

Todos los commit son locales.
Repository Commit
Se genera a partir de los snapshots del staging
area

Todos los commit son locales.

Es una estructura que contiene: snapshots de
archivos comiteados, puntero al commit
anterior, 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 a




Recordar que el commit es a nuestro repo local!!
Commit Staged
Podemos hacer un git add y commit, de los
archivos que están tracked, de forma simple
con:
$ 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 working
directory)
#
#	

 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 Staged
Podemos hacer un git add y commit, de los
archivos que están tracked, de forma simple
con:
$ 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 working
directory)
#                                                   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 Staged
Podemos hacer un git add y commit, de los
archivos que están tracked, de forma simple
con:
$ 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 working
directory)
#                                                   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
       Changes
Para ver los cambios en la working copy pero
no en staging
 $ git diff
 # Muestra el diff entre la working copy y la staging area



Para ver los cambios entre la staging area y el
repositorio (el próximo commit)
 $ git diff --staged
 # Muestra el diff entre la staging area y el HEAD del repositorio
Commit History
Para ver la historia de commits. (git log tiene
muchas 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 History
Para ver la historia de commits. (git log tiene
muchas 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
Branches
Todo commit esta asociado a un branch
Branches
Todo commit esta asociado a un branch

Existen remote branches y local branches
Branches
Todo commit esta asociado a un branch

Existen remote branches y local branches

En los remote branches no se puede hacer
commit, son una referencia a un branch de un
repositorio remoto
Branches
Todo commit esta asociado a un branch

Existen remote branches y local branches

En los remote branches no se puede hacer
commit, son una referencia a un branch de un
repositorio remoto

El branch default es master (en terminos de
svn sería trunk). Se crea en el clone o init.
Branches
Branches
Es un puntero al último commit del branch.
Branches
Es un puntero al último commit del branch.




HEAD es un puntero al branch de la working
copy.
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 copy
cambia 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 copy
cambia 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 copy
cambia 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 su
copy. Lo apunta al          padre.
branch testing


 $ git checkout testing
Local Branches
                           puntero a la branch
 Crea un branch. No
                          del working copy
cambia 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 su
copy. 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 hotfix
Updating f42c576..3a0874c
Fast 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 hotfix
Updating f42c576..3a0874c
Fast 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 hotfix
Updating f42c576..3a0874c
Fast 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 hotfix
Updating f42c576..3a0874c
Fast forward
 README | 1 -               Indico el branch que
                           quiero mergear
 1 files changed, 0 insertions(+), 1 deletions(-)
Branch Merging
                  Se parte de un ancestro común
Three way merge      y se aplican los cambios
Branch Merging
                  Se parte de un ancestro común
Three way merge      y se aplican los cambios




                                  Commit con 2 padres
Branch Merging
                    Se parte de un ancestro común
Three 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                            rebase
First, rewinding head to replay your work on
top of it...
Applying: added staged command
Rebase Branch
 1. Queremos incluir
en nuestro branch los
                                                merge
cambios 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 incluir
en nuestro branch los
                                                merge
cambios 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 incluir
en nuestro branch los
                                                merge
cambios 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 incluir
en nuestro branch los
                                                merge
cambios 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 Repositories
Podemos tener más de un remote repository
Remote Repositories
Podemos tener más de un remote repository

Al hacer clone, se define el repositorio remoto
origin. (es un alias, se puede cambiar)
Remote Repositories
Podemos tener más de un remote repository

Al hacer clone, se define el repositorio remoto
origin. (es un alias, se puede cambiar)

Un remote branch es una referencia de un
branch local de un repositorio remoto.
Remote Repositories
Podemos tener más de un remote repository

Al hacer clone, se define el repositorio remoto
origin. (es un alias, se puede cambiar)

Un remote branch es una referencia de un
branch local de un repositorio remoto.

Tracking Branch: es una local branch
relacionada a un remote branch. (“la sigue” y
puede “actualizarla”). En el clone, master se
crea como tracking branch de origin/master.
Remote Repositories
git fetch trae toda la información de un
repositorio remoto (commits, branchs, tags).

Actualiza los remote branches (no realiza un
merge)
 $ git fetch
 From https://git.zaubersoftware.com/zauber/bob
   b2ed962..982359c master -> origin/master

Si quiere hacer un merge + fetch (tracking
branches):
 $ git pull
 From https://git.zaubersoftware.com/zauber/bob
   b2ed962..982359c master -> origin/master
Remote Repositories
Para crear un branch en base un remote
branch (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 al
repositorio remoto. Se trata de un merge que
solo puede ser fast forward.
 $ git push origin master

 $ git push
Remote Repositories
Para crear un branch en base un remote
branch (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 al
repositorio remoto. Se trata de un merge que
solo puede ser fast forward.
 $ git push origin master

 $ git push       solo tracking branches
Tags (Local and
       Shared)
Es un puntero a un commit

listar los tags
$ git tag
v0.1
v1.3

crear un tag
$ git tag -a v1.4 -m 'my version 1.4'
$ git tag -a v1.2 9fceb02


subir tags a un remote
$ git push origin v1.5
$ git push origin --tags
Workflows
Avanzados
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 Branches
Un 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 & Staging
HEAD 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 & Staging
HEAD 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 Commit



1. Hace los cambios
 en el staging area
Amend Fucked
                 Commits
        ¿Que pasa si hice mal el último commit ?

                      Amend Commit



1. Hace los cambios
                       2. git commit --amend
 en el staging area
Amend Fucked
                 Commits
        ¿Que pasa si hice mal el último commit ?

                      Amend Commit



1. Hace los cambios                              3. Cambia el
                       2. git commit --amend
 en el staging area                            mensaje de commit
Rewrite history
Squash 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 history
Squash 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 bit
opción squash para los       squash 310154e updated README formatting and added blame
que 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' HEAD
Rewrite 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' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd                 Borramos el archivo
(21/21)                                                         passwords.txt del repo
Ref '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 diffs
1. 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 diffs
1. 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 incluir




git add -i nos permite hacer esto y staging interactivo
Referencia
Referencia

git 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?

Mais conteúdo relacionado

Destaque

Presentación Seeding Growth-2015 1a
Presentación Seeding Growth-2015 1aPresentación Seeding Growth-2015 1a
Presentación Seeding Growth-2015 1aSusana Grau Rahola
 
Lazarillo de tornes hoover
Lazarillo de tornes hooverLazarillo de tornes hoover
Lazarillo de tornes hoovernidree
 
Enseñanza del baloncesto 2012
Enseñanza del baloncesto 2012Enseñanza del baloncesto 2012
Enseñanza del baloncesto 2012Otilio Valencia
 
Informe nacional de desarrollo humano 11 c
Informe nacional de desarrollo humano   11 cInforme nacional de desarrollo humano   11 c
Informe nacional de desarrollo humano 11 cJosema España
 
Discurso pronunciado con ocasión de la entrega del premio nobel de literatura
Discurso pronunciado con ocasión de la entrega del premio nobel de literaturaDiscurso pronunciado con ocasión de la entrega del premio nobel de literatura
Discurso pronunciado con ocasión de la entrega del premio nobel de literaturacalulara
 
Perfil de cohorte 12
Perfil de cohorte 12Perfil de cohorte 12
Perfil de cohorte 12ALINA
 
Nuestra universidad
Nuestra universidadNuestra universidad
Nuestra universidadALINA
 
Programa de Clase - COmunicación II
Programa de Clase - COmunicación IIPrograma de Clase - COmunicación II
Programa de Clase - COmunicación IIMartín Martínez
 
Nuevos Estudios Sobre Azuay Aborigen
Nuevos Estudios Sobre Azuay AborigenNuevos Estudios Sobre Azuay Aborigen
Nuevos Estudios Sobre Azuay Aborigendiana
 
Solucionario 1 de marzo
Solucionario  1 de marzoSolucionario  1 de marzo
Solucionario 1 de marzowilliam
 
Avance prog prototitpos didácticos ii semestre- 5°educación
Avance prog prototitpos didácticos ii               semestre- 5°educaciónAvance prog prototitpos didácticos ii               semestre- 5°educación
Avance prog prototitpos didácticos ii semestre- 5°educaciónolin33
 
Estritorio.pptx se ha compartido con usted. (1)
Estritorio.pptx se ha compartido con usted. (1)Estritorio.pptx se ha compartido con usted. (1)
Estritorio.pptx se ha compartido con usted. (1)pernutote
 
Tapas Revistas revistagradería.co
Tapas Revistas revistagradería.coTapas Revistas revistagradería.co
Tapas Revistas revistagradería.coSamPinilla
 
Tema 7 género y escuela
Tema 7 género y escuelaTema 7 género y escuela
Tema 7 género y escuelaRafael Feito
 
01 manual de_astrologia
01 manual de_astrologia01 manual de_astrologia
01 manual de_astrologiaguillergrana
 
Escuela democrática
Escuela democráticaEscuela democrática
Escuela democráticaRafael Feito
 
Centro educación secundaria_simbock
Centro educación secundaria_simbockCentro educación secundaria_simbock
Centro educación secundaria_simbockRebeca
 

Destaque (20)

Quiénes somos
Quiénes somosQuiénes somos
Quiénes somos
 
Presentación Seeding Growth-2015 1a
Presentación Seeding Growth-2015 1aPresentación Seeding Growth-2015 1a
Presentación Seeding Growth-2015 1a
 
Lazarillo de tornes hoover
Lazarillo de tornes hooverLazarillo de tornes hoover
Lazarillo de tornes hoover
 
Enseñanza del baloncesto 2012
Enseñanza del baloncesto 2012Enseñanza del baloncesto 2012
Enseñanza del baloncesto 2012
 
Informe nacional de desarrollo humano 11 c
Informe nacional de desarrollo humano   11 cInforme nacional de desarrollo humano   11 c
Informe nacional de desarrollo humano 11 c
 
Discurso pronunciado con ocasión de la entrega del premio nobel de literatura
Discurso pronunciado con ocasión de la entrega del premio nobel de literaturaDiscurso pronunciado con ocasión de la entrega del premio nobel de literatura
Discurso pronunciado con ocasión de la entrega del premio nobel de literatura
 
Perfil de cohorte 12
Perfil de cohorte 12Perfil de cohorte 12
Perfil de cohorte 12
 
Nuestra universidad
Nuestra universidadNuestra universidad
Nuestra universidad
 
Programa de Clase - COmunicación II
Programa de Clase - COmunicación IIPrograma de Clase - COmunicación II
Programa de Clase - COmunicación II
 
Nuevos Estudios Sobre Azuay Aborigen
Nuevos Estudios Sobre Azuay AborigenNuevos Estudios Sobre Azuay Aborigen
Nuevos Estudios Sobre Azuay Aborigen
 
Solucionario 1 de marzo
Solucionario  1 de marzoSolucionario  1 de marzo
Solucionario 1 de marzo
 
Avance prog prototitpos didácticos ii semestre- 5°educación
Avance prog prototitpos didácticos ii               semestre- 5°educaciónAvance prog prototitpos didácticos ii               semestre- 5°educación
Avance prog prototitpos didácticos ii semestre- 5°educación
 
Estritorio.pptx se ha compartido con usted. (1)
Estritorio.pptx se ha compartido con usted. (1)Estritorio.pptx se ha compartido con usted. (1)
Estritorio.pptx se ha compartido con usted. (1)
 
Tutorial formulario
Tutorial formularioTutorial formulario
Tutorial formulario
 
Tapas Revistas revistagradería.co
Tapas Revistas revistagradería.coTapas Revistas revistagradería.co
Tapas Revistas revistagradería.co
 
Diciplina inteligente-1222132614094373-8
Diciplina inteligente-1222132614094373-8Diciplina inteligente-1222132614094373-8
Diciplina inteligente-1222132614094373-8
 
Tema 7 género y escuela
Tema 7 género y escuelaTema 7 género y escuela
Tema 7 género y escuela
 
01 manual de_astrologia
01 manual de_astrologia01 manual de_astrologia
01 manual de_astrologia
 
Escuela democrática
Escuela democráticaEscuela democrática
Escuela democrática
 
Centro educación secundaria_simbock
Centro educación secundaria_simbockCentro educación secundaria_simbock
Centro educación secundaria_simbock
 

Último

La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 

Último (20)

La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 

Cómo funciona Git: los tres estados y snapshots

  • 1. Git @ Zauber p r i m e r o s p a s o s
  • 4. Historia del SCM Envia sus archivos Merge Manual Envia sus archivos Archivos Sueltos Foo Bar
  • 5. Historia del SCM Envia sus archivos Merge Manual Envia sus archivos Archivos Sueltos Foo Bar Contras No hay historia El Merge es Manual
  • 6. Historia del SCM Envia sus archivos Merge Manual Envia sus archivos Archivos Sueltos Foo Bar Contras No hay historia El Merge es Manual
  • 7. Historia del SCM Envia sus archivos Merge Manual Envia sus archivos Archivos Sueltos Foo Bar Contras No hay historia El Merge es Manual
  • 8. Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de Patchs Foo Bar
  • 9. Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de Patchs Foo Bar Pros Con un Patch el merge es más fácil
  • 10. Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de Patchs Foo Bar Pros Con un Patch el merge es más fácil
  • 11. Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de Patchs Foo Bar Pros Contras Con un Patch el merge es más No hay historia fácil Hay conflictos que no resuelve el merge
  • 12. Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de Patchs Foo Bar Pros Contras Con un Patch el merge es más No hay historia fácil Hay conflictos que no resuelve el merge
  • 13. Historia del SCM Envia sus patchs Merge Semi Automático Envia sus patchs Pasaje de Patchs Foo Bar Pros Contras Con un Patch el merge es más No hay historia fácil Hay conflictos que no resuelve el merge
  • 14. Historia del SCM Local VCS
  • 15. Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge
  • 16. Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge
  • 17. Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge
  • 18. Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge Contras Dificil Colaboración con otros
  • 19. Historia del SCM Local VCS Pros Versionado de archivos Manejo automático de merge Contras Dificil Colaboración con otros
  • 20. Historia del SCM Centralized VCS
  • 21. Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros
  • 22. Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros
  • 23. Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros
  • 24. Historia del SCM Centralized VCS Pros Versionado de archivos Manejo automático de merge Colaboración con otros
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. Historia del SCM Distributed VCS
  • 29. Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows
  • 30. Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows
  • 31. Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows
  • 32. Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows
  • 33. Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows Contras Más dificil de usar?
  • 34. Historia del SCM Distributed VCS Pros Todas las anteriores Cada Repo es un backup Permite Diferentes Workflows Contras Más dificil de usar?
  • 37. Git: Características VCS Distribuido Casi todas las operaciones son locales
  • 38. Git: Características VCS Distribuido Casi todas las operaciones son locales Integridad (cada commit id es un checksum SHA)
  • 39. Git: Características VCS Distribuido Casi todas las operaciones son locales Integridad (cada commit id es un checksum SHA) Díficil de perder información
  • 40. Git: Características VCS Distribuido Casi todas las operaciones son locales Integridad (cada commit id es un checksum SHA) Díficil de perder información Guarda Snapshots
  • 41. Git: Características Snapshots, not Differences git Vs. others
  • 42. Git: Características Snapshots, not Differences git Vs. Guarda delta de archivos, y others construye la version x, aplicando todas las diferencias
  • 43. Git: Características Snapshots, not Differences git Guarda snapshots de archivos modificados y links de archivos no modificados. Vs. Guarda delta de archivos, y others construye la version x, aplicando todas las diferencias
  • 44. Git: Características The Three States
  • 45. Git: Características Cada archivo puede estar en 3 estados: commited, modified, staged The Three States
  • 46. Git: Características Cada archivo puede estar en 3 estados: commited, modified, staged The Three States En el working copy viven los modified (y untracked). Es donde se trabaja
  • 47. Git: Características Cada archivo puede estar en 3 estados: commited, En staging viven los modified, staged archivos marcados para The Three States el próximo commit En el working copy viven los modified (y untracked). Es donde se trabaja
  • 48. Git: Características Cada archivo puede estar en 3 estados: commited, En staging viven los modified, staged archivos marcados para The Three States el próximo commit En el working copy En el repository, viven los modified (y viven los archivos untracked). Es donde commited. se trabaja
  • 49. Git: Características Cada archivo puede estar en 3 estados: commited, En staging viven los modified, staged archivos marcados para The Three States el próximo commit En el working copy En el repository, viven los modified (y viven los archivos untracked). Es donde commited. se trabaja Flujo básico: •checkout proyecto •hago cambios •stage files a comitear •commit de staged files.
  • 50. Git: Características Cada archivo puede estar en 3 estados: commited, En staging viven los modified, staged archivos marcados para The Three States el próximo commit En el working copy En el repository, viven los modified (y viven los archivos untracked). 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 al files. commit, a menos que lo vuelva a agregar!
  • 52. 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
  • 53. 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.
  • 55. Staging Area Registra los archivos a incluir en el próximo commit.
  • 56. Staging Area Registra los archivos a incluir en el próximo commit. Se limpia al realizar un commit
  • 57. Staging Area Registra los archivos a incluir en el próximo commit. Se limpia al realizar un commit Guarda el snapshot del archivo al momento en que fue agregado al staging area. (cambios posteriores no son incluidos, a menos que se agregue otra vez)
  • 58. Add Files to Stage A medida que realizo cambios, puedo ir marcando archivos (y su estado) para ser incluidos 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
  • 59. Add Files to Stage A medida que realizo cambios, puedo ir marcando archivos (y su estado) para ser incluidos 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
  • 60. Add Files to Stage A medida que realizo cambios, puedo ir marcando archivos (y su estado) para ser incluidos 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
  • 61. Add Files to Stage A medida que realizo cambios, puedo ir marcando archivos (y su estado) para ser incluidos 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
  • 62. Add Files to Stage Si después de hacer add, cambiamos el archivo, 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 working directory) # # modified: a
  • 63. Add Files to Stage Si después de hacer add, cambiamos el archivo, 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 working directory) # # modified: a
  • 64. Add Files to Stage Si después de hacer add, cambiamos el archivo, 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 working directory) # Cambios posteriores. No van al # modified: a commit
  • 65. 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 a TIP git status te muestra como hacer estos comandos
  • 67. Repository Commit Se genera a partir de los snapshots del staging area
  • 68. Repository Commit Se genera a partir de los snapshots del staging area Todos los commit son locales.
  • 69. Repository Commit Se genera a partir de los snapshots del staging area Todos los commit son locales. Es una estructura que contiene: snapshots de archivos comiteados, puntero al commit anterior, metadata.
  • 70. 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 a Recordar que el commit es a nuestro repo local!!
  • 71. Commit Staged Podemos hacer un git add y commit, de los archivos que están tracked, de forma simple con: $ 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 working directory) # # 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”
  • 72. Commit Staged Podemos hacer un git add y commit, de los archivos que están tracked, de forma simple con: $ 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 working directory) # 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”
  • 73. Commit Staged Podemos hacer un git add y commit, de los archivos que están tracked, de forma simple con: $ 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 working directory) # 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
  • 74. Reviewing your Changes Para ver los cambios en la working copy pero no en staging $ git diff # Muestra el diff entre la working copy y la staging area Para ver los cambios entre la staging area y el repositorio (el próximo commit) $ git diff --staged # Muestra el diff entre la staging area y el HEAD del repositorio
  • 75. Commit History Para ver la historia de commits. (git log tiene muchas 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
  • 76. Commit History Para ver la historia de commits. (git log tiene muchas 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
  • 78. Branches Todo commit esta asociado a un branch
  • 79. Branches Todo commit esta asociado a un branch Existen remote branches y local branches
  • 80. Branches Todo commit esta asociado a un branch Existen remote branches y local branches En los remote branches no se puede hacer commit, son una referencia a un branch de un repositorio remoto
  • 81. Branches Todo commit esta asociado a un branch Existen remote branches y local branches En los remote branches no se puede hacer commit, son una referencia a un branch de un repositorio remoto El branch default es master (en terminos de svn sería trunk). Se crea en el clone o init.
  • 83. Branches Es un puntero al último commit del branch.
  • 84. Branches Es un puntero al último commit del branch. HEAD es un puntero al branch de la working copy.
  • 85. Local Branches $ git branch testing $ git checkout testing
  • 86. Local Branches $ git branch testing Importante! Notar como cada commit apunta a su padre. $ git checkout testing
  • 87. 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
  • 88. 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
  • 89. Local Branches puntero a la branch Crea un branch. No del working copy cambia 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
  • 90. Local Branches puntero a la branch Crea un branch. No del working copy cambia 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
  • 91. Local Branches puntero a la branch Crea un branch. No del working copy cambia 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 su copy. Lo apunta al padre. branch testing $ git checkout testing
  • 92. Local Branches puntero a la branch Crea un branch. No del working copy cambia 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 su copy. Lo apunta al padre. branch testing $ git checkout testing el checkout cambia el puntero HEAD
  • 93. Branch Merging Fast Forward Cuando el merge solo implica mover un puntero $ git checkout master $ git merge hotfix Updating f42c576..3a0874c Fast forward README | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
  • 94. 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 hotfix Updating f42c576..3a0874c Fast forward README | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
  • 95. 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 hotfix Updating f42c576..3a0874c Fast forward README | 1 - Indico el branch que quiero mergear 1 files changed, 0 insertions(+), 1 deletions(-)
  • 96. 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 hotfix Updating f42c576..3a0874c Fast forward README | 1 - Indico el branch que quiero mergear 1 files changed, 0 insertions(+), 1 deletions(-)
  • 97. Branch Merging Se parte de un ancestro común Three way merge y se aplican los cambios
  • 98. Branch Merging Se parte de un ancestro común Three way merge y se aplican los cambios Commit con 2 padres
  • 99. Branch Merging Se parte de un ancestro común Three way merge y se aplican los cambios Commit con 2 padres Si hubo conflictos en el merge. Deben resolverse en el working copy
  • 100. Rebase Branch merge master experiment $ git checkout experiment $ git rebase master rebase First, rewinding head to replay your work on top of it... Applying: added staged command
  • 101. Rebase Branch 1. Queremos incluir en nuestro branch los merge cambios 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
  • 102. Rebase Branch 1. Queremos incluir en nuestro branch los merge cambios 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
  • 103. Rebase Branch 1. Queremos incluir en nuestro branch los merge cambios 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
  • 104. Rebase Branch 1. Queremos incluir en nuestro branch los merge cambios 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
  • 106. Remote Repositories Podemos tener más de un remote repository
  • 107. Remote Repositories Podemos tener más de un remote repository Al hacer clone, se define el repositorio remoto origin. (es un alias, se puede cambiar)
  • 108. Remote Repositories Podemos tener más de un remote repository Al hacer clone, se define el repositorio remoto origin. (es un alias, se puede cambiar) Un remote branch es una referencia de un branch local de un repositorio remoto.
  • 109. Remote Repositories Podemos tener más de un remote repository Al hacer clone, se define el repositorio remoto origin. (es un alias, se puede cambiar) Un remote branch es una referencia de un branch local de un repositorio remoto. Tracking Branch: es una local branch relacionada a un remote branch. (“la sigue” y puede “actualizarla”). En el clone, master se crea como tracking branch de origin/master.
  • 110. Remote Repositories git fetch trae toda la información de un repositorio remoto (commits, branchs, tags). Actualiza los remote branches (no realiza un merge) $ git fetch From https://git.zaubersoftware.com/zauber/bob b2ed962..982359c master -> origin/master Si quiere hacer un merge + fetch (tracking branches): $ git pull From https://git.zaubersoftware.com/zauber/bob b2ed962..982359c master -> origin/master
  • 111. Remote Repositories Para crear un branch en base un remote branch (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 al repositorio remoto. Se trata de un merge que solo puede ser fast forward. $ git push origin master $ git push
  • 112. Remote Repositories Para crear un branch en base un remote branch (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 al repositorio remoto. Se trata de un merge que solo puede ser fast forward. $ git push origin master $ git push solo tracking branches
  • 113. Tags (Local and Shared) Es un puntero a un commit listar los tags $ git tag v0.1 v1.3 crear un tag $ git tag -a v1.4 -m 'my version 1.4' $ git tag -a v1.2 9fceb02 subir tags a un remote $ git push origin v1.5 $ git push origin --tags
  • 115. 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
  • 116. Embrace Branches Un 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
  • 117. 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
  • 118. 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
  • 119. 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
  • 120. Stash for later ¿Que pasa si quiero cambiar de branch y tengo cambios en mi working copy?
  • 121. Stash for later ¿Que pasa si quiero cambiar de branch y tengo cambios en mi working copy? STASH IT!
  • 122. 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 & Staging HEAD is now at 049d078 added the index file Area (To restore them type "git stash apply")
  • 123. 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 & Staging HEAD 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
  • 124. Amend Fucked Commits ¿Que pasa si hice mal el último commit ?
  • 125. Amend Fucked Commits ¿Que pasa si hice mal el último commit ? Amend Commit
  • 126. Amend Fucked Commits ¿Que pasa si hice mal el último commit ? Amend Commit 1. Hace los cambios en el staging area
  • 127. Amend Fucked Commits ¿Que pasa si hice mal el último commit ? Amend Commit 1. Hace los cambios 2. git commit --amend en el staging area
  • 128. Amend Fucked Commits ¿Que pasa si hice mal el último commit ? Amend Commit 1. Hace los cambios 3. Cambia el 2. git commit --amend en el staging area mensaje de commit
  • 129. Rewrite history Squash 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
  • 130. Rewrite history Squash 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
  • 131. 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 bit opción squash para los squash 310154e updated README formatting and added blame que queremos hacer squash a5f4a0d added cat-file desparecer
  • 132. Rewrite history Filter Branch Nos permite hacer operaciones sobre cada commit $ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) Ref 'refs/heads/master' was rewritten
  • 133. Rewrite history Filter Branch Nos permite hacer operaciones sobre cada commit $ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd Borramos el archivo (21/21) passwords.txt del repo Ref 'refs/heads/master' was rewritten
  • 134. Two commits, one Working Copy ¿Que pasa si necesito 2 commits de un archivo?
  • 135. Two commits, one Working Copy ¿Que pasa si necesito 2 commits de un archivo? Partial Staging!
  • 136. Two commits, one Working Copy ¿Que pasa si necesito 2 commits de un archivo? Partial Staging! 1. git add -p
  • 137. Two commits, one Working Copy ¿Que pasa si necesito 2 commits de un archivo? Partial Staging! 2. Elegir los diffs 1. git add -p chunks a incluir
  • 138. 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 incluir
  • 139. 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 incluir git add -i nos permite hacer esto y staging interactivo
  • 141. Referencia git help (man pages para todos los comandos) Wiki Zauber (proximamente) Pro Git (http://progit.org/book/) Community Book (http://book.git-scm.com/)

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n