SlideShare una empresa de Scribd logo
nuestro de cada día
Nociones y algo más
Alan Descoins
Tryolabs, 2014
Objetivos
● Entender mejor lo que hacemos diariamente
● Hacer menos preguntas (entender el man)
● Mejorar algunas prácticas
● Cometer menos errores
● Hacer algo super puntual ;)
Orígenes y filosofía
● 2005, kernel de Linux
● Eficiencia, diseño simple
● Desarrollo no lineal (miles de
branches en paralelo)
● Completamente distribuído
Distribuído
● Casi toda operación es
local
● Todas las máquinas
tienen TODA la
información
● Contraste SVN, CVS,
etc.
Algo de teoría
● git init inicializa un repositorio
● Crea un único directorio .git en la raíz (no contamina)
● Mini filesystem
● Snapshots, no diferencias!
Git y el contenido
● Tracking de contenido, NO archivos
● Vocabulario: tracked / untracked
● Objetos de git
○ Blob (contenido)
○ Tree (estructura)
○ Commit (apunta a un tree, + data)
○ Tag (apunta a un commit, + data)
SHA-1
Blob
● Un archivo por “contenido”
● SHA-1 del contenido (zlib) + un
header
● Inicialmente, loose object
● Luego packfile (eficiencia,
heurísticas…)
● Ejemplo: find .git/objects -type f
Tree
● Como una estructura de
directorios
● Punteros a blobs u otros trees
● Representa un snapshot
completo del estado
● Ejemplo: git ls-tree <sha-1>
Commit
● Información sobre los trees
● Quién, cuándo, por qué guardó el tree
● Apunta al tree de “más arriba” (top level) del
proyecto
● Jerarquía de árbol
● También SHA-1, diferente hash que el tree
al que apunta
Commit (2)
Tags
● Puntero a un commit
● Información adicional, firma
● Para no tener que acordarse del
SHA-1...
La santa Trinidad
Un contenido puede estar en tres estados
● Committed
● Modified
● Staged
La santa Trinidad (2)
Tres partes un proyecto:
● Working directory
● Staging area (o index)
● .git (repository)
Comandos básicos
● git add - agrega al index (staging)
● git commit - guarda el index actual con el autor,
mensaje, fecha, etc.
● git status - muestra los archivos con diferencias en
working dir, staging, y los untracked
● git diff - lo que cambió pero no está staged
● git diff --cached - lo que va para el próximo commit
● git log
Saltear el staging
● A veces, puede ser más fácil saltear el
staging
● git commit -a | git commit <archivo>
● Agregan automáticamente al staging, luego
commitean
Branches
● Simplemente un puntero a un commit
● Tan rápido como escribir 41 caracteres a un
archivo (SHA-1 + n)
● Por defecto master
● Puntero especial HEAD (branch actual)
● Ejemplo: cat .git/HEAD
Branches (2)
● git checkout
para cambiarse
de branch
Referencias
● El puntero HEAD es un caso particular
● Los tags también: “una branch inamovible”
(lightweight tags)
Ejemplo: find .git/refs
Remotes
● No hay servidor central
● Se pueden agregar varios remotes, copias
externas del repositorio (URL)
● El famoso origin :)
Branches remotas
● Guardan el estado de las branches en los repositorios
remotos
● Son locales, pero no se pueden mover; solo cuando se
hacen operaciones en la red (ej. git fetch).
● Forma <remote>/<branch>
Ejemplo: cat .git/refs/remotes/origin/master
Fetch, push
● git fetch - sincroniza y actualiza branches remotas
(mueve punteros)
● Ej. git fetch <remote>
● git pull - equivalente a git fetch y luego git merge,
mergea la branch local con cambios en la remota
● git push - actualiza branch remota con lo local
● Ej. git push <remote> <branch>
Tracking branches
● Branches locales pueden “seguir” remotas
● Dos posibilidades:
○ git checkout --track <remote>/<branch>
○ git push --set-upstream <remote> <branch>
● Así, al pushear no hay que escribir el
nombre del remote y la branch :)
Merges
● Fast-forward: git es
inteligente y solo necesita
mover un puntero
● Integrar cambios de una branch en otra
Merges (2)
● Three way merge: commit no es ancestro
directo de lo que se mergea (no lineal)
● Git determina el mejor ancestro común
● Se crea un merge commit, especial pues
tiene más de un padre
● Conflictos...
Three way merge
Rebasing
● Otra forma de introducir cambios de una
branch en otra
● Rewind & replay, reescribe los commits
● A partir de un ancestro común
● Historia queda siempre lineal, más allá de
que originalmente fue en paralelo
Rebasing (2)
● git rebase <new-base>
mueve los commits de la
branch actual a la nueva
base
● git rebase -i <new-base>
selecciona acciones para
cada commit
● git pull --rebase
Reglas doradas
● Nunca hacer rebase de una branch que está
pusheada, o pulleaste de otra persona
○ Commits duplicados si se hace merge
○ Discutible: si la branch remota la usa solo uno a modo de backup.
○ Usar git push --force, si se sabe que otros developers no trabajan en
la branch.
● Si se hace rebase para traer cambios de otros
developers al local, hacerlo tan seguido como sea
posible.
Rebase vs Merge
¿Por qué rebase?
● Historial limpio
● Colaboración open-source, muchos lo exigen
● Más fácil code review
¿Por qué merge?
● Más fácil solucionar conflictos
● Menor riesgo
git reset
● Se usa a menudo
● Mal usado, puede generar pérdida de
datos (workdir unsafe)
● Tres opciones más usadas:
○ --soft
○ --mixed
○ --hard
git reset...
● mueve la branch a la que apunta HEAD para que
apunte al commit destino (frena si --soft)
● luego hace que el staging se vea como eso (frena si --
mixed, opción por defecto)
● luego hace que el working dir se vea como eso (si --
hard, es workdir usafe!)
Ejemplos git reset
● Con HEAD en branch dev, hago git reset master
○ ahora dev y master apuntan al mismo commit
● Con HEAD en branch master, hago git reset --hard
origin/master
○ ahora mi branch master es idéntica a la remote
(descartar cambios locales)
● git reset --soft HEAD~
○ Deshace el último commit sin perder cambios
Unstaging de archivos
● Al hacer git reset <file> no especifica branch
ni commit SHA
● Equivalente a git reset --mixed HEAD <file>
● Saca un archivo particular del staging,
opuesto de git add :)
git checkout
● git checkout <branch> es superficialmente
parecido a git reset --hard <branch>
● Dos diferencias:
○ Workdir safe! :D Chequea por pérdida de datos.
○ reset mueve la branch a la que apunta HEAD,
checkout mueve el puntero HEAD.
git checkout de archivo
● git checkout <branch> <file>
○ Al igual que reset, ahora no tiene sentido que mueva
HEAD. Reemplaza solamente <file> en workdir
(workdir usafe!).
○ Sería lo mismo que git reset --hard <branch> <file>
○ Pero ese comando no existe :)
Situaciones comunes (1)
● “Necesito hacer pull pero tengo cambios en
los que estoy trabajando y no quiero
commitear todavía”
○ git stash
○ Es un stack
○ Vaciarlo con git stash pop.
Situaciones comunes (2)
● “Hay un bug en una branch, necesito saber
qué commit lo introdujo”
○ git bisect
○ Búsqueda binaria, conducida por git. Muy fácil!
○ git bisect start
git bisect bad <commit>
git bisect good <commit>
● Probamos en cada paso (git hace checkout)
Situaciones comunes (3)
● “Hice uno (o varios) commits en la branch
equivocada, todavía no pushee!”
○ Si la branch correcta no existe
■ git checkout -b <branch correcta>
■ git reset sobre vieja branch
○ Si la branch ya existía
■ git cherry-pick (o git rebase --onto)
■ git reset sobre vieja branch
Situaciones comunes (4)
● “Tengo muchos cambios en un archivo y
solo quiero comittear parte de ellos”
○ git add -p o git commit -p
○ git va a preguntar por cada parte, si queremos
agregarla o no
Situaciones comunes (5)
● “Necesito cambiar unos commits”
● “Necesito borrar unos commits”
● “Necesito cambiar de orden unos commits”
○ git rebase -i (--interactive)
○ Fácil de usar
○ Reescribiendo la historia, preguntándonos qué
queremos hacer por cada commit
Situaciones comunes (6)
● “Estoy haciendo un merge con muchos
conflictos y quiero volver a como estaba
antes de comenzarlo”
○ git merge --abort
(Imágenes de git-scm y demás ;) )
No aprendió git

Más contenido relacionado

La actualidad más candente

Introducción a git
Introducción a gitIntroducción a git
Introducción a git
Keopx
 
Curso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en GithubCurso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en Github
Carlos Huamaní
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantes
nscoder_mad
 
Fundamentos de GIt y Github
Fundamentos de GIt y GithubFundamentos de GIt y Github
Fundamentos de GIt y Github
Javier Latorre López-Villalta
 
WorkShop: Introducción a GIT
WorkShop: Introducción a GITWorkShop: Introducción a GIT
WorkShop: Introducción a GIT
Keopx
 
Introducción al uso Git y GitHub para trabajo colaborativo
Introducción al uso Git y GitHub para trabajo colaborativoIntroducción al uso Git y GitHub para trabajo colaborativo
Introducción al uso Git y GitHub para trabajo colaborativo
Juan J. Merelo
 
Introducción a git y git hub
Introducción a git y git hubIntroducción a git y git hub
Introducción a git y git hub
Miguel Ascanio Gómez
 
Git: control de versiones
Git: control de versionesGit: control de versiones
Git: control de versiones
Moisés Pérez Delgado
 
Control de versiones con Git
Control de versiones con GitControl de versiones con Git
Control de versiones con Git
Daniel Salas Denegri
 
Git + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XIIGit + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XII
quaip
 
Tallerintroducciongit
TallerintroducciongitTallerintroducciongit
Tallerintroducciongit
Mario Pérez Esteso
 
Taller breve de introduccion a Git
Taller breve de introduccion a GitTaller breve de introduccion a Git
Taller breve de introduccion a Git
Mario IC
 
Uso practico de git
Uso practico de gitUso practico de git
Uso practico de git
Keopx
 
Un modelo exitoso para git
Un modelo exitoso para gitUn modelo exitoso para git
Un modelo exitoso para git
Miguel Angel Piña Avelino
 
Introducción a GIT
Introducción a GITIntroducción a GIT
Introducción a GIT
Jose Emilio Labra Gayo
 
Git: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativoGit: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativo
Aprende Git
 
Introducción a Git
Introducción a GitIntroducción a Git
Introducción a Git
Sergio Rus
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMP
Keopx
 
Control de versiones con GIT
Control de versiones con GITControl de versiones con GIT
Control de versiones con GIT
Julio Silva
 
LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente?
LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente? LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente?
LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente?
emateucr
 

La actualidad más candente (20)

Introducción a git
Introducción a gitIntroducción a git
Introducción a git
 
Curso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en GithubCurso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en Github
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantes
 
Fundamentos de GIt y Github
Fundamentos de GIt y GithubFundamentos de GIt y Github
Fundamentos de GIt y Github
 
WorkShop: Introducción a GIT
WorkShop: Introducción a GITWorkShop: Introducción a GIT
WorkShop: Introducción a GIT
 
Introducción al uso Git y GitHub para trabajo colaborativo
Introducción al uso Git y GitHub para trabajo colaborativoIntroducción al uso Git y GitHub para trabajo colaborativo
Introducción al uso Git y GitHub para trabajo colaborativo
 
Introducción a git y git hub
Introducción a git y git hubIntroducción a git y git hub
Introducción a git y git hub
 
Git: control de versiones
Git: control de versionesGit: control de versiones
Git: control de versiones
 
Control de versiones con Git
Control de versiones con GitControl de versiones con Git
Control de versiones con Git
 
Git + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XIIGit + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XII
 
Tallerintroducciongit
TallerintroducciongitTallerintroducciongit
Tallerintroducciongit
 
Taller breve de introduccion a Git
Taller breve de introduccion a GitTaller breve de introduccion a Git
Taller breve de introduccion a Git
 
Uso practico de git
Uso practico de gitUso practico de git
Uso practico de git
 
Un modelo exitoso para git
Un modelo exitoso para gitUn modelo exitoso para git
Un modelo exitoso para git
 
Introducción a GIT
Introducción a GITIntroducción a GIT
Introducción a GIT
 
Git: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativoGit: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativo
 
Introducción a Git
Introducción a GitIntroducción a Git
Introducción a Git
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMP
 
Control de versiones con GIT
Control de versiones con GITControl de versiones con GIT
Control de versiones con GIT
 
LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente?
LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente? LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente?
LaTeX y Git: ¿Cómo controlar archivos de LaTeX eficientemente?
 

Destacado

Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!
Gonzalo Sainz Trápaga
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con Jenkins
César Hernández
 
Resolución de conflictos en git
Resolución de conflictos en gitResolución de conflictos en git
Resolución de conflictos en git
Aprende Git
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...
César Hernández
 
La he liado parda
La he liado pardaLa he liado parda
La he liado parda
Aprende Git
 
Minicurso Git
Minicurso GitMinicurso Git
Minicurso Git
Bruno Orlandi
 
Internship Altares - International business coordinator
Internship Altares - International business coordinatorInternship Altares - International business coordinator
Internship Altares - International business coordinator
Michel Monti
 
Introducción MongoDB con Java
Introducción MongoDB con JavaIntroducción MongoDB con Java
Introducción MongoDB con Java
César Hernández
 
Gestión de infraestructura tomcat tom ee con tfactory
Gestión de infraestructura tomcat tom ee con tfactoryGestión de infraestructura tomcat tom ee con tfactory
Gestión de infraestructura tomcat tom ee con tfactory
César Hernández
 
Java mission control para monitoreo, administración y profilig de aplicacion...
Java mission control para monitoreo, administración y profilig de aplicacion...Java mission control para monitoreo, administración y profilig de aplicacion...
Java mission control para monitoreo, administración y profilig de aplicacion...
César Hernández
 
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
César Hernández
 
Bases del Concurso Público para el Otorgamiento de Autorizaciones
Bases del Concurso Público para el Otorgamiento de Autorizaciones Bases del Concurso Público para el Otorgamiento de Autorizaciones
Bases del Concurso Público para el Otorgamiento de Autorizaciones
Carlos Mena
 
Business Voice January 2011
Business Voice January 2011Business Voice January 2011
Business Voice January 2011
Las Vegas Chamber of Commerce
 
The Five Sentence E-mail
The Five Sentence E-mailThe Five Sentence E-mail
The Five Sentence E-mail
Nasscom Startups
 
Presentacion bienestar2
Presentacion bienestar2Presentacion bienestar2
Presentacion bienestar2
bienestaraprendizcesge
 
Program 2016
Program 2016Program 2016
Program 2016
Asger Frisgård
 
Agenda barcelona www.mundoespiritual.net
Agenda barcelona www.mundoespiritual.netAgenda barcelona www.mundoespiritual.net
Agenda barcelona www.mundoespiritual.net
denivel
 
La dematerializzazione dei contratti
La dematerializzazione dei contrattiLa dematerializzazione dei contratti
La dematerializzazione dei contratti
Giovanni Maria Riccio
 
Manual sistema de gestión de calida1
Manual sistema de gestión de calida1Manual sistema de gestión de calida1
Manual sistema de gestión de calida1
tiburoneza
 

Destacado (19)

Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con Jenkins
 
Resolución de conflictos en git
Resolución de conflictos en gitResolución de conflictos en git
Resolución de conflictos en git
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...
 
La he liado parda
La he liado pardaLa he liado parda
La he liado parda
 
Minicurso Git
Minicurso GitMinicurso Git
Minicurso Git
 
Internship Altares - International business coordinator
Internship Altares - International business coordinatorInternship Altares - International business coordinator
Internship Altares - International business coordinator
 
Introducción MongoDB con Java
Introducción MongoDB con JavaIntroducción MongoDB con Java
Introducción MongoDB con Java
 
Gestión de infraestructura tomcat tom ee con tfactory
Gestión de infraestructura tomcat tom ee con tfactoryGestión de infraestructura tomcat tom ee con tfactory
Gestión de infraestructura tomcat tom ee con tfactory
 
Java mission control para monitoreo, administración y profilig de aplicacion...
Java mission control para monitoreo, administración y profilig de aplicacion...Java mission control para monitoreo, administración y profilig de aplicacion...
Java mission control para monitoreo, administración y profilig de aplicacion...
 
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
 
Bases del Concurso Público para el Otorgamiento de Autorizaciones
Bases del Concurso Público para el Otorgamiento de Autorizaciones Bases del Concurso Público para el Otorgamiento de Autorizaciones
Bases del Concurso Público para el Otorgamiento de Autorizaciones
 
Business Voice January 2011
Business Voice January 2011Business Voice January 2011
Business Voice January 2011
 
The Five Sentence E-mail
The Five Sentence E-mailThe Five Sentence E-mail
The Five Sentence E-mail
 
Presentacion bienestar2
Presentacion bienestar2Presentacion bienestar2
Presentacion bienestar2
 
Program 2016
Program 2016Program 2016
Program 2016
 
Agenda barcelona www.mundoespiritual.net
Agenda barcelona www.mundoespiritual.netAgenda barcelona www.mundoespiritual.net
Agenda barcelona www.mundoespiritual.net
 
La dematerializzazione dei contratti
La dematerializzazione dei contrattiLa dematerializzazione dei contratti
La dematerializzazione dei contratti
 
Manual sistema de gestión de calida1
Manual sistema de gestión de calida1Manual sistema de gestión de calida1
Manual sistema de gestión de calida1
 

Similar a El git nuestro de cada dia

Git windows
Git windowsGit windows
Git windows
Fernando Perez
 
Intro a GIT
Intro a GITIntro a GIT
Taller Git en la URJC
Taller Git en la URJC Taller Git en la URJC
Taller Git en la URJC
sidelab
 
Git
GitGit
Git & GitHub Part II
Git & GitHub Part IIGit & GitHub Part II
Git & GitHub Part II
Max Rodriguez
 
Git y drupal
Git y drupalGit y drupal
Git y drupal
Juampy NR
 
Git with gifs
Git with gifsGit with gifs
Git with gifs
betabeers
 
Uso de git: un caso real
Uso de git: un caso realUso de git: un caso real
Uso de git: un caso real
Pablo González Doval
 
Sistemas de control de versiones
Sistemas de control de versionesSistemas de control de versiones
Sistemas de control de versiones
Miguel Zúñiga González
 
Git workflow
Git workflowGit workflow
Git workflow
René Olivo
 
Git workflow v2
Git workflow  v2Git workflow  v2
Git workflow v2
René Olivo
 
Git - Gitlab
Git - GitlabGit - Gitlab
Git - Gitlab
Euler Sánchez
 
Git 101+
Git 101+Git 101+
Git 101+
sys army
 
Git
GitGit
Uso de git para el mantenimiento de parches locales o públicos
Uso de git para el mantenimiento  de parches locales o públicosUso de git para el mantenimiento  de parches locales o públicos
Uso de git para el mantenimiento de parches locales o públicos
Iñaki Arenaza
 
Mejora tu productividad con git
Mejora tu productividad con gitMejora tu productividad con git
Mejora tu productividad con git
ch1l3no
 
Git Primeros pasos
Git Primeros pasosGit Primeros pasos
Git Primeros pasos
Jesús Amieiro
 
GIT presentación de teoría y practica.pdf
GIT presentación de teoría y practica.pdfGIT presentación de teoría y practica.pdf
GIT presentación de teoría y practica.pdf
MartinBonuccelli
 
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora BlancoPresentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Antonio Luque Bravo
 
Flujo de trabajo básico con git
Flujo de trabajo básico con gitFlujo de trabajo básico con git
Flujo de trabajo básico con git
Jan Sanchez
 

Similar a El git nuestro de cada dia (20)

Git windows
Git windowsGit windows
Git windows
 
Intro a GIT
Intro a GITIntro a GIT
Intro a GIT
 
Taller Git en la URJC
Taller Git en la URJC Taller Git en la URJC
Taller Git en la URJC
 
Git
GitGit
Git
 
Git & GitHub Part II
Git & GitHub Part IIGit & GitHub Part II
Git & GitHub Part II
 
Git y drupal
Git y drupalGit y drupal
Git y drupal
 
Git with gifs
Git with gifsGit with gifs
Git with gifs
 
Uso de git: un caso real
Uso de git: un caso realUso de git: un caso real
Uso de git: un caso real
 
Sistemas de control de versiones
Sistemas de control de versionesSistemas de control de versiones
Sistemas de control de versiones
 
Git workflow
Git workflowGit workflow
Git workflow
 
Git workflow v2
Git workflow  v2Git workflow  v2
Git workflow v2
 
Git - Gitlab
Git - GitlabGit - Gitlab
Git - Gitlab
 
Git 101+
Git 101+Git 101+
Git 101+
 
Git
GitGit
Git
 
Uso de git para el mantenimiento de parches locales o públicos
Uso de git para el mantenimiento  de parches locales o públicosUso de git para el mantenimiento  de parches locales o públicos
Uso de git para el mantenimiento de parches locales o públicos
 
Mejora tu productividad con git
Mejora tu productividad con gitMejora tu productividad con git
Mejora tu productividad con git
 
Git Primeros pasos
Git Primeros pasosGit Primeros pasos
Git Primeros pasos
 
GIT presentación de teoría y practica.pdf
GIT presentación de teoría y practica.pdfGIT presentación de teoría y practica.pdf
GIT presentación de teoría y practica.pdf
 
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora BlancoPresentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
 
Flujo de trabajo básico con git
Flujo de trabajo básico con gitFlujo de trabajo básico con git
Flujo de trabajo básico con git
 

Último

CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIACONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
ginnazamudio
 
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdfDESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
JonathanCovena1
 
1° T3 Examen Mtro JP 23-24.pdf completos
1° T3 Examen Mtro JP 23-24.pdf completos1° T3 Examen Mtro JP 23-24.pdf completos
1° T3 Examen Mtro JP 23-24.pdf completos
ROCIORUIZQUEZADA
 
CONCURSOS EDUCATIVOS 2024-PRESENTACIÓN ORIENTACIONES ETAPA IE (1).pptx
CONCURSOS EDUCATIVOS 2024-PRESENTACIÓN ORIENTACIONES ETAPA IE (1).pptxCONCURSOS EDUCATIVOS 2024-PRESENTACIÓN ORIENTACIONES ETAPA IE (1).pptx
CONCURSOS EDUCATIVOS 2024-PRESENTACIÓN ORIENTACIONES ETAPA IE (1).pptx
CARMENSnchez854591
 
1° T3 Examen Zany de primer grado compl
1° T3 Examen Zany  de primer grado compl1° T3 Examen Zany  de primer grado compl
1° T3 Examen Zany de primer grado compl
ROCIORUIZQUEZADA
 
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBALMATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
Ana Fernandez
 
Hablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes CuadernilloHablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes Cuadernillo
Mónica Sánchez
 
Clase Prensencial, Actividad 2.pdf.......
Clase Prensencial, Actividad 2.pdf.......Clase Prensencial, Actividad 2.pdf.......
Clase Prensencial, Actividad 2.pdf.......
LuanaJaime1
 
Camus, Albert - El Extranjero.pdf
Camus, Albert -        El Extranjero.pdfCamus, Albert -        El Extranjero.pdf
Camus, Albert - El Extranjero.pdf
AlexDeLonghi
 
La necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdfLa necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdf
JonathanCovena1
 
pueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptxpueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptx
RAMIREZNICOLE
 
efemérides del mes de junio 2024 (1).pptx
efemérides del mes de junio 2024 (1).pptxefemérides del mes de junio 2024 (1).pptx
efemérides del mes de junio 2024 (1).pptx
acgtz913
 
UrkuninaLab.pdfsadsadasddassadsadsadasdsad
UrkuninaLab.pdfsadsadasddassadsadsadasdsadUrkuninaLab.pdfsadsadasddassadsadsadasdsad
UrkuninaLab.pdfsadsadasddassadsadsadasdsad
JorgeVillota6
 
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBALMATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
Ana Fernandez
 
Presentación de la historia de PowerPoint y sus características más relevantes.
Presentación de la historia de PowerPoint y sus características más relevantes.Presentación de la historia de PowerPoint y sus características más relevantes.
Presentación de la historia de PowerPoint y sus características más relevantes.
genesiscabezas469
 
Prueba/test conoce tus heridas de la infancia
Prueba/test conoce tus heridas de la infanciaPrueba/test conoce tus heridas de la infancia
Prueba/test conoce tus heridas de la infancia
LudmilaOrtega3
 
Compartir p4s.co Pitch Hackathon Template Plantilla final.pptx-2.pdf
Compartir p4s.co Pitch Hackathon Template Plantilla final.pptx-2.pdfCompartir p4s.co Pitch Hackathon Template Plantilla final.pptx-2.pdf
Compartir p4s.co Pitch Hackathon Template Plantilla final.pptx-2.pdf
JimmyDeveloperWebAnd
 
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLMExamen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Juan Martín Martín
 
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdfAPUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
VeronicaCabrera50
 
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docxRETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
100078171
 

Último (20)

CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIACONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
 
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdfDESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
 
1° T3 Examen Mtro JP 23-24.pdf completos
1° T3 Examen Mtro JP 23-24.pdf completos1° T3 Examen Mtro JP 23-24.pdf completos
1° T3 Examen Mtro JP 23-24.pdf completos
 
CONCURSOS EDUCATIVOS 2024-PRESENTACIÓN ORIENTACIONES ETAPA IE (1).pptx
CONCURSOS EDUCATIVOS 2024-PRESENTACIÓN ORIENTACIONES ETAPA IE (1).pptxCONCURSOS EDUCATIVOS 2024-PRESENTACIÓN ORIENTACIONES ETAPA IE (1).pptx
CONCURSOS EDUCATIVOS 2024-PRESENTACIÓN ORIENTACIONES ETAPA IE (1).pptx
 
1° T3 Examen Zany de primer grado compl
1° T3 Examen Zany  de primer grado compl1° T3 Examen Zany  de primer grado compl
1° T3 Examen Zany de primer grado compl
 
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBALMATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
 
Hablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes CuadernilloHablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes Cuadernillo
 
Clase Prensencial, Actividad 2.pdf.......
Clase Prensencial, Actividad 2.pdf.......Clase Prensencial, Actividad 2.pdf.......
Clase Prensencial, Actividad 2.pdf.......
 
Camus, Albert - El Extranjero.pdf
Camus, Albert -        El Extranjero.pdfCamus, Albert -        El Extranjero.pdf
Camus, Albert - El Extranjero.pdf
 
La necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdfLa necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdf
 
pueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptxpueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptx
 
efemérides del mes de junio 2024 (1).pptx
efemérides del mes de junio 2024 (1).pptxefemérides del mes de junio 2024 (1).pptx
efemérides del mes de junio 2024 (1).pptx
 
UrkuninaLab.pdfsadsadasddassadsadsadasdsad
UrkuninaLab.pdfsadsadasddassadsadsadasdsadUrkuninaLab.pdfsadsadasddassadsadsadasdsad
UrkuninaLab.pdfsadsadasddassadsadsadasdsad
 
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBALMATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
 
Presentación de la historia de PowerPoint y sus características más relevantes.
Presentación de la historia de PowerPoint y sus características más relevantes.Presentación de la historia de PowerPoint y sus características más relevantes.
Presentación de la historia de PowerPoint y sus características más relevantes.
 
Prueba/test conoce tus heridas de la infancia
Prueba/test conoce tus heridas de la infanciaPrueba/test conoce tus heridas de la infancia
Prueba/test conoce tus heridas de la infancia
 
Compartir p4s.co Pitch Hackathon Template Plantilla final.pptx-2.pdf
Compartir p4s.co Pitch Hackathon Template Plantilla final.pptx-2.pdfCompartir p4s.co Pitch Hackathon Template Plantilla final.pptx-2.pdf
Compartir p4s.co Pitch Hackathon Template Plantilla final.pptx-2.pdf
 
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLMExamen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
 
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdfAPUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
 
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docxRETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
RETROALIMENTACIÓN PARA EL EXAMEN ÚNICO AUXILIAR DE ENFERMERIA.docx
 

El git nuestro de cada dia

  • 1. nuestro de cada día Nociones y algo más Alan Descoins Tryolabs, 2014
  • 2. Objetivos ● Entender mejor lo que hacemos diariamente ● Hacer menos preguntas (entender el man) ● Mejorar algunas prácticas ● Cometer menos errores ● Hacer algo super puntual ;)
  • 3. Orígenes y filosofía ● 2005, kernel de Linux ● Eficiencia, diseño simple ● Desarrollo no lineal (miles de branches en paralelo) ● Completamente distribuído
  • 4. Distribuído ● Casi toda operación es local ● Todas las máquinas tienen TODA la información ● Contraste SVN, CVS, etc.
  • 5. Algo de teoría ● git init inicializa un repositorio ● Crea un único directorio .git en la raíz (no contamina) ● Mini filesystem ● Snapshots, no diferencias!
  • 6. Git y el contenido ● Tracking de contenido, NO archivos ● Vocabulario: tracked / untracked ● Objetos de git ○ Blob (contenido) ○ Tree (estructura) ○ Commit (apunta a un tree, + data) ○ Tag (apunta a un commit, + data) SHA-1
  • 7. Blob ● Un archivo por “contenido” ● SHA-1 del contenido (zlib) + un header ● Inicialmente, loose object ● Luego packfile (eficiencia, heurísticas…) ● Ejemplo: find .git/objects -type f
  • 8. Tree ● Como una estructura de directorios ● Punteros a blobs u otros trees ● Representa un snapshot completo del estado ● Ejemplo: git ls-tree <sha-1>
  • 9. Commit ● Información sobre los trees ● Quién, cuándo, por qué guardó el tree ● Apunta al tree de “más arriba” (top level) del proyecto ● Jerarquía de árbol ● También SHA-1, diferente hash que el tree al que apunta
  • 11. Tags ● Puntero a un commit ● Información adicional, firma ● Para no tener que acordarse del SHA-1...
  • 12. La santa Trinidad Un contenido puede estar en tres estados ● Committed ● Modified ● Staged
  • 13. La santa Trinidad (2) Tres partes un proyecto: ● Working directory ● Staging area (o index) ● .git (repository)
  • 14. Comandos básicos ● git add - agrega al index (staging) ● git commit - guarda el index actual con el autor, mensaje, fecha, etc. ● git status - muestra los archivos con diferencias en working dir, staging, y los untracked ● git diff - lo que cambió pero no está staged ● git diff --cached - lo que va para el próximo commit ● git log
  • 15. Saltear el staging ● A veces, puede ser más fácil saltear el staging ● git commit -a | git commit <archivo> ● Agregan automáticamente al staging, luego commitean
  • 16. Branches ● Simplemente un puntero a un commit ● Tan rápido como escribir 41 caracteres a un archivo (SHA-1 + n) ● Por defecto master ● Puntero especial HEAD (branch actual) ● Ejemplo: cat .git/HEAD
  • 17. Branches (2) ● git checkout para cambiarse de branch
  • 18. Referencias ● El puntero HEAD es un caso particular ● Los tags también: “una branch inamovible” (lightweight tags) Ejemplo: find .git/refs
  • 19. Remotes ● No hay servidor central ● Se pueden agregar varios remotes, copias externas del repositorio (URL) ● El famoso origin :)
  • 20. Branches remotas ● Guardan el estado de las branches en los repositorios remotos ● Son locales, pero no se pueden mover; solo cuando se hacen operaciones en la red (ej. git fetch). ● Forma <remote>/<branch> Ejemplo: cat .git/refs/remotes/origin/master
  • 21. Fetch, push ● git fetch - sincroniza y actualiza branches remotas (mueve punteros) ● Ej. git fetch <remote> ● git pull - equivalente a git fetch y luego git merge, mergea la branch local con cambios en la remota ● git push - actualiza branch remota con lo local ● Ej. git push <remote> <branch>
  • 22. Tracking branches ● Branches locales pueden “seguir” remotas ● Dos posibilidades: ○ git checkout --track <remote>/<branch> ○ git push --set-upstream <remote> <branch> ● Así, al pushear no hay que escribir el nombre del remote y la branch :)
  • 23. Merges ● Fast-forward: git es inteligente y solo necesita mover un puntero ● Integrar cambios de una branch en otra
  • 24. Merges (2) ● Three way merge: commit no es ancestro directo de lo que se mergea (no lineal) ● Git determina el mejor ancestro común ● Se crea un merge commit, especial pues tiene más de un padre ● Conflictos...
  • 26. Rebasing ● Otra forma de introducir cambios de una branch en otra ● Rewind & replay, reescribe los commits ● A partir de un ancestro común ● Historia queda siempre lineal, más allá de que originalmente fue en paralelo
  • 27. Rebasing (2) ● git rebase <new-base> mueve los commits de la branch actual a la nueva base ● git rebase -i <new-base> selecciona acciones para cada commit ● git pull --rebase
  • 28. Reglas doradas ● Nunca hacer rebase de una branch que está pusheada, o pulleaste de otra persona ○ Commits duplicados si se hace merge ○ Discutible: si la branch remota la usa solo uno a modo de backup. ○ Usar git push --force, si se sabe que otros developers no trabajan en la branch. ● Si se hace rebase para traer cambios de otros developers al local, hacerlo tan seguido como sea posible.
  • 29. Rebase vs Merge ¿Por qué rebase? ● Historial limpio ● Colaboración open-source, muchos lo exigen ● Más fácil code review ¿Por qué merge? ● Más fácil solucionar conflictos ● Menor riesgo
  • 30. git reset ● Se usa a menudo ● Mal usado, puede generar pérdida de datos (workdir unsafe) ● Tres opciones más usadas: ○ --soft ○ --mixed ○ --hard
  • 31. git reset... ● mueve la branch a la que apunta HEAD para que apunte al commit destino (frena si --soft) ● luego hace que el staging se vea como eso (frena si -- mixed, opción por defecto) ● luego hace que el working dir se vea como eso (si -- hard, es workdir usafe!)
  • 32. Ejemplos git reset ● Con HEAD en branch dev, hago git reset master ○ ahora dev y master apuntan al mismo commit ● Con HEAD en branch master, hago git reset --hard origin/master ○ ahora mi branch master es idéntica a la remote (descartar cambios locales) ● git reset --soft HEAD~ ○ Deshace el último commit sin perder cambios
  • 33. Unstaging de archivos ● Al hacer git reset <file> no especifica branch ni commit SHA ● Equivalente a git reset --mixed HEAD <file> ● Saca un archivo particular del staging, opuesto de git add :)
  • 34. git checkout ● git checkout <branch> es superficialmente parecido a git reset --hard <branch> ● Dos diferencias: ○ Workdir safe! :D Chequea por pérdida de datos. ○ reset mueve la branch a la que apunta HEAD, checkout mueve el puntero HEAD.
  • 35. git checkout de archivo ● git checkout <branch> <file> ○ Al igual que reset, ahora no tiene sentido que mueva HEAD. Reemplaza solamente <file> en workdir (workdir usafe!). ○ Sería lo mismo que git reset --hard <branch> <file> ○ Pero ese comando no existe :)
  • 36. Situaciones comunes (1) ● “Necesito hacer pull pero tengo cambios en los que estoy trabajando y no quiero commitear todavía” ○ git stash ○ Es un stack ○ Vaciarlo con git stash pop.
  • 37. Situaciones comunes (2) ● “Hay un bug en una branch, necesito saber qué commit lo introdujo” ○ git bisect ○ Búsqueda binaria, conducida por git. Muy fácil! ○ git bisect start git bisect bad <commit> git bisect good <commit> ● Probamos en cada paso (git hace checkout)
  • 38. Situaciones comunes (3) ● “Hice uno (o varios) commits en la branch equivocada, todavía no pushee!” ○ Si la branch correcta no existe ■ git checkout -b <branch correcta> ■ git reset sobre vieja branch ○ Si la branch ya existía ■ git cherry-pick (o git rebase --onto) ■ git reset sobre vieja branch
  • 39. Situaciones comunes (4) ● “Tengo muchos cambios en un archivo y solo quiero comittear parte de ellos” ○ git add -p o git commit -p ○ git va a preguntar por cada parte, si queremos agregarla o no
  • 40. Situaciones comunes (5) ● “Necesito cambiar unos commits” ● “Necesito borrar unos commits” ● “Necesito cambiar de orden unos commits” ○ git rebase -i (--interactive) ○ Fácil de usar ○ Reescribiendo la historia, preguntándonos qué queremos hacer por cada commit
  • 41. Situaciones comunes (6) ● “Estoy haciendo un merge con muchos conflictos y quiero volver a como estaba antes de comenzarlo” ○ git merge --abort
  • 42. (Imágenes de git-scm y demás ;) ) No aprendió git