1 minuto(s) de lectura

Git Cherry-pick

  • Este comando se utiliza para copiar un commit especifico de una rama mediante su identificador hash SHA-1 , comparar los datos entre este seleccionado commit y el commit en el que nos encontramos , fusionarlos y en caso de producirse conflictos en la unión de ambos commits , resolveros y fusionarlos generando un nuevo commit o deshaciendo todas esta acciones como si no se hubiera ejecutando ningún comando

  • Para aplicar este comando no deben existir cambios en los ficheros del (Directorio de Trabajo / Working Directory) o en el {Staging Area / Index / Staged}

  • Aplicar los cambios realizados en el commit indicando la rama y creando un nuevo commit

git cherry-pick <codigo-hash-SHA-1>
  • Estoy en la rama rama-x y quiero copiar un commit especifico de la rama master

    • Para ello me situó en la rama-x mediante
git checkout rama-x
  • Busco el commit que me interesa dentro de la rama master ejecutando el comando
git log --all --oneline --graph --decorate
# El comando me muestra estos datos
# ------------------
# Este es el commit 
# que tengo que copiar
#   ↓
* b0e63ad (origin/master, origin/HEAD, master) 1-Archive
|  
|  
* 1096247 Readme & License
  • Ahora ejecuto el comando que copia el commit y le paso por parámetro el commit que quiero copiar y se aloja en otra rama
git cherry-pick b0e63ad
[rama-x 5598930] 1-Archive
 Author: Usuario <usuario@gmail.es>
 Date: Tue Feb 14 19:23:10 2017 +0100
 1 file changed, 17 insertions(+)
 create mode 100644 1-Archive
  • Si ejecutamos el comando
git log --all --online --graph
  • Nos mostrará el siguiente grafo de commits mostrando la creación de un nuevo commit extraído de otra rama y añadido a la rama actual rama-x con la que estamos trabajando
* 5598930 (HEAD -> rama-x) 1-Archive # Rama a la que le añadimos un archivo de la rama 'master'  
| * b0e63ad (origin/master, origin/HEAD, master) 1-Archive # Rama a la que le hemos extraído el contenido
|/  
* 1096247 Readme & License
  • Si aparecen conflictos, no se realiza el nuevo commit con la fusión de ambos commits y tendremos que resolver los conflictos mediante los siguientes comandos

  • Saltarse los conflictos y generar el commits con ellos dentro del archivo

git cherry-pick <commit> --skip
  • Eliminar los conflictos y restaurar los archivos como estaban antes de ejecutar el comando cherry-pick
git cherry-pick <commit> --abort

Deja un comentario