multiple - git cherry pick merge
git cherry-pick a otra rama (4)
Me pregunto si existe la manera de copiar un compromiso en otra rama sin verificar esa rama.
Por ejemplo, tengo dos ramas: master
y parallel_version
.
Estoy en la rama de parallel_version
y encontré un error en el archivo común para estas ramas.
Lo he arreglado y cometido. ¿Cómo duplicar esta confirmación en otra rama, asumiendo que estoy usando git-svn?
Normalmente yo haría:
$ git checkout master
$ git cherry-pick parallel_version
$ git checkout parallel_version
¿Hay mejor manera de hacerlo?
Aquí hay una pequeña secuencia de comandos que crea un clon temporal del repositorio, como lo sugiere user2394284 :
/ usr / bin / git-tmp-clone o ~ / bin / git-tmp-clone
#!/bin/bash
# Unique name for the temporary clone.
totalhash=$(tar -c $(git rev-parse --show-toplevel)/.git | sha256sum | head -c8)
tmprepo="/tmp/$(basename $(pwd))_${totalhash}"
git clone . ${tmprepo}
# Start an interactive shell in the clone. Pass any
# arguments as initial commands to be executed.
/bin/bash --init-file <(echo "cd ${tmprepo}; $@")
# Clean up the clone.
rm -rf ${tmprepo} && echo "Deleted ${tmprepo}"
(Este script es menos robusto, pero parece funcionar para mí en Ubuntu).
Puede usar esto para elegir, por ejemplo, la última confirmación del brach actual en otra rama, ejecutando
git-tmp-clone "git checkout TARGET_BRANCH
&& git cherry-pick $(git rev-parse --short @)
&& git push origin HEAD"
(Tenga en cuenta que en este ejemplo, ¡ rev-parse
se evalúa en el repositorio de origen antes de crear el clon! Es por eso que apunta al compromiso más reciente. Adapte según sea necesario).
Eso no es posible, simplemente imagine lo que sucedería si hubiera un conflicto que no se pudiera resolver automáticamente. Por la misma razón, tampoco puede actualizar las sucursales que no están actualmente desprotegidas (incluso si era posible un avance rápido).
Idea loca (basada en el comentario de mnaoumov ) si realmente desea evitar tocar los archivos extraídos (digamos que no quiere perturbar su sistema de compilación) ... eso es lo que quiero de todos modos.
- Clona todo el repositorio de git en un directorio temporal.
- Hacer el trabajo en el clon.
- Añadir el clon como un mando a distancia.
-
git fetch clone && git branch mybranch clone/mybranch -f
- Limpiar.
Esto sería una cosa para automatizar. Si tiene instantáneas del sistema de archivos, la clonación de todo el repositorio es barata, tal vez no sea tan loca después de todo ...
https://github.com/lennartcl/gitl proporciona scripts "git cherry-copy" y "git cherry-move" que hacen esto y manejan la mayoría de los casos de esquina.