La situación:
- el maestro está en X
- quickfix1 está en X + 2 confirmaciones
Tal que:
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Luego comencé a trabajar en quickfix2, pero por accidente tomé quickfix1 como la rama de origen para copiar, no el maestro. Ahora quickfix2 está en X + 2 commits + 2 commits relevantes.
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
\
q2a--q2b (quickfix2 HEAD)
Ahora quiero tener una rama con quickfix2, pero sin los 2 commits que pertenecen a quickfix1.
q2a'--q2b' (quickfix2 HEAD)
/
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Intenté crear un parche a partir de una determinada revisión en quickfix2, pero el parche no conserva el historial de confirmación. ¿Hay alguna manera de guardar mi historial de confirmación, pero tener una rama sin cambios en quickfix1?
quickfix1
. (Tenga en cuenta también la diferencia en las respuestas.)Respuestas:
Este es un caso clásico de
rebase --onto
:Entonces deberías ir de
a:
Esto se hace mejor en un árbol de trabajo limpio.
Ver
git config --global rebase.autostash true
, especialmente después de Git 2.10 .fuente
q2a
OntoX
y seleccione Rebase 2 confirmaciones de las opciones del cuadro de diálogo que se produzcan.git rebase --onto
.rebase.autostash
configuración: eso evitará cualquier pérdida de trabajo en progreso en el árbol de trabajo al hacer un rebase.Puede usar
git cherry-pick
para elegir la confirmación que desea copiar.Probablemente la mejor manera es crear la rama de master, luego en esa rama use
git cherry-pick
los 2 commits de quickfix2 que desee.fuente
Lo más simple que puedes hacer es elegir un rango. Hace lo mismo que el
rebase --onto
pero es más fácil para los ojos :)fuente
rebase --onto
también preserva los cambios originales?rebase
ycherry-pick
darle nuevas llaves SHA. Esto se debe a que cada confirmación es una instantánea única del repositorio.cherry-pick
un rango como en esta respuesta y confundió mi repositorio. Tuve que hacercherry-pick
s individuales para cada commit. (Y tal vez no sea necesario decirlo, pero en caso de que alguien tenga dificultades, debe hacerlocherry-pick
en el orden cronológico en que se aplicaron sus compromisos).git checkout
Es crucial aquí. ¿Cuál es tu cabeza :)?Yo creo que es:
fuente
cherry-pick
funciona con hash de confirmación, así que si solo quieres obtener una confirmación de algún lugar y colocarla en otro lugar, este es el camino a seguir. Solo asegúrese de hacercheckout <branch>
primero la rama correcta.Otros comandos más útiles aquí con explicación: Guía Git
fuente