Más allá de git add/commit/push
Directorio de
trabajo
Área de
preparación
Repositorio
Local
Repositorio
Remoto
add commit push
fetch
pull
reset [hash]
reset
Acerca de...
3 Niveles de membresía
• Oracle ACE Director
• Oracle ACE
• Oracle ACE Associate
bit.ly/OracleACEProgram
500+ Technical
Experts Helping
Peers Globally
Nomina a alguien que conozcas: acenomination.oracle.com
Contacto:
@oracleace
Facebook.com/oracleaces
oracle-ace_ww@oracle.com
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Oracle DevCS
Plataforma de desarrollo proveída como servicio
Desarrollo Equipo
Colaboración
● Wiki
● Fragmentos de código
● Solicitud de integración
Repo. Código Fuente
Pruebas auto./Calidad
Integración Continua
Entrega Continua
Gestión de Tareas
Tableros ágiles
ReportesRepositorio Maven
Registro Docker
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Oracle DevCS
DevOps
Planear
Codificar Construir Probar
Liberar
DesplegarOperarMonitorear
● Plan
Creación/Edición/Seguimiento a tareas,
tableros ágiles
● Codificar
Git → Gestión de ramas, solicitudes de
integración
IDEs → Plugin
Colaboración → Wiki, fragmentos de
código
● Construir
Hudson y herramientas de construcción
(ej. maven, gradle, etc.)
● Probar y comprobar
Junit, Selenium, findbugs, sonarqube
● Liberar y Desplegar
Integrado con otros servicios en la nube
de Oracle.
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Oracle DevCS
Despliegue
...
Otros serviciosOracle Java CS
(JEE)
Oracle Application Container CS
(Node.js, Java SE, PHP)
Oracle Developer CS
Oracle Database CS Oracle Container
Service
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Oracle DevCS
Git
● Gestión de usuarios
● Gestión de repositorios
– Ramas
– Tags
– Historia
– Creación/Edición de archivos
● Merge Requests
– Notificación
– Colaboración
– Interacción
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Flujos de trabajo con Git
Definición
● Guías que definen como
trabajar con Git
● Miembros del proyecto
deben conocerlas y
seguirlas
● Diferentes workflows
para diferentes
proyectos
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Flujos de trabajo con Git
Feature Branch
Fuerte trabajo con
ramas
Base para otros
workflows
Promueve
colaboración
Pull Requests
Code Review
master
feature
feature
feature
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Flujos de trabajo con Git
Gitflow
hotfixes
release
develop
feature
feature
Vincent Driessen - http://nvie.com/posts/a-successful-git-branching-model/
Define el rol de cada
rama y su
interacción con las
demás
Útil para modelos
donde el software se
desarrolla por
versiones
Extensión: git-flow
master
v0.1 v0.02 v1.0
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Flujos de trabajo con Git
Forking
master
hotfixes
release
develop
feature
feature
v0.1 v0.02v0.1 v1.0
master
hotfixes
release
develop
feature
feature
v0.1 v0.02v0.1 v1.0
upstream
Proyecto
oficial
origin
Fork
(copia)
Dueño del
Repositorio
Solicitud de integración
Aprueba integración
Pull
Rechaza integración
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Flujos de trabajo con Git
Recomendaciones
● No hay un workflow que se
ajuste a todos los
proyectos
● El modelo de negocio
influye en la selección
● Código en rama master
debe estar completo y
funcional en todo momento
● Crear ramas de corta vida
● Dar nombres significativos
a las ramas
● Al confirmar cambios usar
mensajes claros
● Cada commit debe ser
completo y coherente
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git stash
● Guardado rápido de cambios del
directorio de trabajo.
● Permite trabajar en otras tareas
sin afectar lo que se estaba
haciendo.
● No confirma cambios.
● Permite volver a aplicar los
cambios guardados al directorio
de trabajo.
● Solo local.
Directorio de
trabajo
Guardado
Rápido
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git stash – Guardado rápido
# Guarda rápidamente el trabajo en progreso con un mensaje genérico (WIP + rama + hash).
# Cuidado! No guarda cambios de archivos ignorados o sin seguimiento.
git stash
# Guarda rápidamente el trabajo en progreso con el mensaje especificado.
# Cuidado! No guarda cambios de archivos ignorados o sin seguimiento.
git stash save “message”
# Guarda rápidamente el trabajo en progreso con el mensaje especificado.
# Incluye archivos sin seguimiento, no incluye archivos ignorados.
git stash save -u “message”
# Guarda rápidamente el trabajo en progreso con el mensaje especificado.
# Incluye archivos sin seguimiento e ignorados.
git stash save -a “message”
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git stash – Listar/Examinar cambios guardados
# Lista los puntos de guardado rápido que se encuentran localmente.
git stash list
# Muestra un resumen de los últimos cambios guardados.
git stash show
# Muestra un resumen del n-ésimo cambio guardado.
git stash show stash@{n}
# Muestra el detalle de los últimos cambios guardados.
git stash show -p
# Muestra el detalle del n-ésimo cambio guardado.
git stash show -p stash@{n}
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git stash – Aplicar/Borrar cambios guardados
# Aplica el último cambio guardado al directorio de trabajo y lo borra localmente.
# Es posible pasar como parámetro el n-ésimo cambio guardado.
git stash pop [stash@{n}]
# Aplica el último cambio guardado al directorio de trabajo, NO lo borra.
# Es posible pasar como parámetro el n-ésimo cambio guardado.
git stash apply [stash@{n}]
# Borra el último cambio guardado.
# Es posible pasar como parámetro el n-ésimo cambio guardado.
git stash drop [stash@{n}]
# Borra todos los cambios guardados.
git stash clear
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git stash – Recomendaciones
● git save se ha marcado como
obsoleto en favor de git push.
● En lo posible usar siempre un
mensaje claro.
● No almacenar los cambios por
mucho tiempo.
● ¿Muchos conflictos? Usar:
git stash branch rama-nueva stash@{n}
Directorio de
trabajo
Guardado
Rápido
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git cherry-pick
● Selecciona un commit y lo
aplica a la rama actual.
● Posibilidad de resolver
conflictos y
continuar/abortar.
● Genera nuevos commit con
nuevos IDs por cada commit
seleccionado. a
master feature
d
b
c
d’ e
cherry-pick
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git cherry-pick
# 1. Ubicarse en la rama destino, en este caso master
git checkout master
# 2. Copiar el commit de la rama feature a la rama master
git cherry-pick -x commitId
a
master feature
d
b
c
d’ e
cherry-pick
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git cherry-pick - Recomendaciones
● Usar con cuidado debido a
que crea commits duplicados.
● Usar opción -x para adicionar
mensaje auto.:
– "(cherry picked from commit …)"
● Si se requiere adicionar
varios commits consecutivos,
mejor usar merge o rebase. a
master feature
d
b
c
d’ e
cherry-pick
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git commit --amend
● Permite “modificar” el
último commit:
– Adicionar archivos del área
de preparación.
– Cambiar mensaje de
confirmación.
● Crea un nuevo commit
con el mismo autor e
instante de tiempo.
feature
b
c
git commit --amend
a
d
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git commit --amend
# Adicionar nuevos archivos al último commit
# No modifica el mensaje del commit
git add archivoPendiente
git commit --amend --no-edit
# Modificar mensaje último commit
git commit --amend -m “nuevo mensaje”
feature
b
c
git commit --amend
a
d
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git commit --amend - Recomendaciones
● Evitar corregir commits
que ya han sido puestos
en el remoto.
– git push -f origin rama
bajo tu propio riesgo...
feature
b
c
git commit --amend
a
d
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git rebase
● Brinda la posibilidad de reescribir la
historia.
● También permite integrar cambios de una
rama en otra:
– Historias lineales.
– Como si la rama se hubiese creado a partir
de los últimos cambios.
● Dos modos:
– Manual
– Interactivo: Permite cambiar mensajes,
modificar/combinar/remover commits...
master feature
git rebase master feature
f
d
a
e
c
b
f’
d’
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git rebase
# Modifica la base de la segunda rama
# para que sea la punta de la primera
git rebase master feature
# Modifica la hstoria de la rama actual desde el commit n
git checkout feature
git log
git rebase -i HEAD~n
master feature
git rebase master feature
f’
e’
a
d
c
b
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Comandos más avanzados con Git
git rebase - Recomendaciones
● Evitar corregir commits
que ya han sido puestos
en el remoto.
– git push -f origin rama
bajo tu propio riesgo...
master feature
git rebase master feature
f’
e’
a
d
c
b
Más allá de git add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018
Enlaces
A más contenido...
● Libro oficial Git
https://git-scm.com/book
● Información general de Git
https://www.atlassian.com/git/tutorials/what-is-version-control
● Developer Cloud Service
https://cloud.oracle.com/developer_service
● Iconos
https://www.iconfinder.com

Más allá de Git add/commit/push

  • 1.
    Más allá degit add/commit/push Directorio de trabajo Área de preparación Repositorio Local Repositorio Remoto add commit push fetch pull reset [hash] reset
  • 2.
  • 3.
    3 Niveles demembresía • Oracle ACE Director • Oracle ACE • Oracle ACE Associate bit.ly/OracleACEProgram 500+ Technical Experts Helping Peers Globally Nomina a alguien que conozcas: acenomination.oracle.com Contacto: @oracleace Facebook.com/oracleaces oracle-ace_ww@oracle.com
  • 4.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Oracle DevCS Plataforma de desarrollo proveída como servicio Desarrollo Equipo Colaboración ● Wiki ● Fragmentos de código ● Solicitud de integración Repo. Código Fuente Pruebas auto./Calidad Integración Continua Entrega Continua Gestión de Tareas Tableros ágiles ReportesRepositorio Maven Registro Docker
  • 5.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Oracle DevCS DevOps Planear Codificar Construir Probar Liberar DesplegarOperarMonitorear ● Plan Creación/Edición/Seguimiento a tareas, tableros ágiles ● Codificar Git → Gestión de ramas, solicitudes de integración IDEs → Plugin Colaboración → Wiki, fragmentos de código ● Construir Hudson y herramientas de construcción (ej. maven, gradle, etc.) ● Probar y comprobar Junit, Selenium, findbugs, sonarqube ● Liberar y Desplegar Integrado con otros servicios en la nube de Oracle.
  • 6.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Oracle DevCS Despliegue ... Otros serviciosOracle Java CS (JEE) Oracle Application Container CS (Node.js, Java SE, PHP) Oracle Developer CS Oracle Database CS Oracle Container Service
  • 7.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Oracle DevCS Git ● Gestión de usuarios ● Gestión de repositorios – Ramas – Tags – Historia – Creación/Edición de archivos ● Merge Requests – Notificación – Colaboración – Interacción
  • 8.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Flujos de trabajo con Git Definición ● Guías que definen como trabajar con Git ● Miembros del proyecto deben conocerlas y seguirlas ● Diferentes workflows para diferentes proyectos
  • 9.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Flujos de trabajo con Git Feature Branch Fuerte trabajo con ramas Base para otros workflows Promueve colaboración Pull Requests Code Review master feature feature feature
  • 10.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Flujos de trabajo con Git Gitflow hotfixes release develop feature feature Vincent Driessen - http://nvie.com/posts/a-successful-git-branching-model/ Define el rol de cada rama y su interacción con las demás Útil para modelos donde el software se desarrolla por versiones Extensión: git-flow master v0.1 v0.02 v1.0
  • 11.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Flujos de trabajo con Git Forking master hotfixes release develop feature feature v0.1 v0.02v0.1 v1.0 master hotfixes release develop feature feature v0.1 v0.02v0.1 v1.0 upstream Proyecto oficial origin Fork (copia) Dueño del Repositorio Solicitud de integración Aprueba integración Pull Rechaza integración
  • 12.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Flujos de trabajo con Git Recomendaciones ● No hay un workflow que se ajuste a todos los proyectos ● El modelo de negocio influye en la selección ● Código en rama master debe estar completo y funcional en todo momento ● Crear ramas de corta vida ● Dar nombres significativos a las ramas ● Al confirmar cambios usar mensajes claros ● Cada commit debe ser completo y coherente
  • 13.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git stash ● Guardado rápido de cambios del directorio de trabajo. ● Permite trabajar en otras tareas sin afectar lo que se estaba haciendo. ● No confirma cambios. ● Permite volver a aplicar los cambios guardados al directorio de trabajo. ● Solo local. Directorio de trabajo Guardado Rápido
  • 14.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git stash – Guardado rápido # Guarda rápidamente el trabajo en progreso con un mensaje genérico (WIP + rama + hash). # Cuidado! No guarda cambios de archivos ignorados o sin seguimiento. git stash # Guarda rápidamente el trabajo en progreso con el mensaje especificado. # Cuidado! No guarda cambios de archivos ignorados o sin seguimiento. git stash save “message” # Guarda rápidamente el trabajo en progreso con el mensaje especificado. # Incluye archivos sin seguimiento, no incluye archivos ignorados. git stash save -u “message” # Guarda rápidamente el trabajo en progreso con el mensaje especificado. # Incluye archivos sin seguimiento e ignorados. git stash save -a “message”
  • 15.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git stash – Listar/Examinar cambios guardados # Lista los puntos de guardado rápido que se encuentran localmente. git stash list # Muestra un resumen de los últimos cambios guardados. git stash show # Muestra un resumen del n-ésimo cambio guardado. git stash show stash@{n} # Muestra el detalle de los últimos cambios guardados. git stash show -p # Muestra el detalle del n-ésimo cambio guardado. git stash show -p stash@{n}
  • 16.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git stash – Aplicar/Borrar cambios guardados # Aplica el último cambio guardado al directorio de trabajo y lo borra localmente. # Es posible pasar como parámetro el n-ésimo cambio guardado. git stash pop [stash@{n}] # Aplica el último cambio guardado al directorio de trabajo, NO lo borra. # Es posible pasar como parámetro el n-ésimo cambio guardado. git stash apply [stash@{n}] # Borra el último cambio guardado. # Es posible pasar como parámetro el n-ésimo cambio guardado. git stash drop [stash@{n}] # Borra todos los cambios guardados. git stash clear
  • 17.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git stash – Recomendaciones ● git save se ha marcado como obsoleto en favor de git push. ● En lo posible usar siempre un mensaje claro. ● No almacenar los cambios por mucho tiempo. ● ¿Muchos conflictos? Usar: git stash branch rama-nueva stash@{n} Directorio de trabajo Guardado Rápido
  • 18.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git cherry-pick ● Selecciona un commit y lo aplica a la rama actual. ● Posibilidad de resolver conflictos y continuar/abortar. ● Genera nuevos commit con nuevos IDs por cada commit seleccionado. a master feature d b c d’ e cherry-pick
  • 19.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git cherry-pick # 1. Ubicarse en la rama destino, en este caso master git checkout master # 2. Copiar el commit de la rama feature a la rama master git cherry-pick -x commitId a master feature d b c d’ e cherry-pick
  • 20.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git cherry-pick - Recomendaciones ● Usar con cuidado debido a que crea commits duplicados. ● Usar opción -x para adicionar mensaje auto.: – "(cherry picked from commit …)" ● Si se requiere adicionar varios commits consecutivos, mejor usar merge o rebase. a master feature d b c d’ e cherry-pick
  • 21.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git commit --amend ● Permite “modificar” el último commit: – Adicionar archivos del área de preparación. – Cambiar mensaje de confirmación. ● Crea un nuevo commit con el mismo autor e instante de tiempo. feature b c git commit --amend a d
  • 22.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git commit --amend # Adicionar nuevos archivos al último commit # No modifica el mensaje del commit git add archivoPendiente git commit --amend --no-edit # Modificar mensaje último commit git commit --amend -m “nuevo mensaje” feature b c git commit --amend a d
  • 23.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git commit --amend - Recomendaciones ● Evitar corregir commits que ya han sido puestos en el remoto. – git push -f origin rama bajo tu propio riesgo... feature b c git commit --amend a d
  • 24.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git rebase ● Brinda la posibilidad de reescribir la historia. ● También permite integrar cambios de una rama en otra: – Historias lineales. – Como si la rama se hubiese creado a partir de los últimos cambios. ● Dos modos: – Manual – Interactivo: Permite cambiar mensajes, modificar/combinar/remover commits... master feature git rebase master feature f d a e c b f’ d’
  • 25.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git rebase # Modifica la base de la segunda rama # para que sea la punta de la primera git rebase master feature # Modifica la hstoria de la rama actual desde el commit n git checkout feature git log git rebase -i HEAD~n master feature git rebase master feature f’ e’ a d c b
  • 26.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Comandos más avanzados con Git git rebase - Recomendaciones ● Evitar corregir commits que ya han sido puestos en el remoto. – git push -f origin rama bajo tu propio riesgo... master feature git rebase master feature f’ e’ a d c b
  • 27.
    Más allá degit add/commit/pushAlexis Lopez @aa_lopez v1 – MAY - 2018 Enlaces A más contenido... ● Libro oficial Git https://git-scm.com/book ● Información general de Git https://www.atlassian.com/git/tutorials/what-is-version-control ● Developer Cloud Service https://cloud.oracle.com/developer_service ● Iconos https://www.iconfinder.com