Pregunta

Me flubbed mi historia y quiero hacer algunos cambios a la misma. El problema es que tengo una confirmación con dos cambios que no tienen, y esto se comprometan está rodeado por algunos otros cambios en mi historia local (no presionado).

Quiero dividir este comprometerse antes de empujarlo fuera, pero la mayoría de las guías que estoy viendo tienen que ver con la división de seguridad de cometer más recientes, o no comprometidos cambios locales. ¿Es factible hacer esto a una confirmación de que está enterrado en la historia un poco, sin tener que "volver a hacer" mis compromete desde entonces?

¿Fue útil?

Solución

Hay una guía para dividir compromete en la página de manual de rebase . El breve resumen es:

  • Realizar una rebase interactivo incluida la meta cometer (por ejemplo git rebase -i <commit-to-split>^ branch) y marca a ser editado.

  • Cuando los alcances de rebase que se comprometen, el uso git reset HEAD^ para restablecer antes de la confirmación, pero mantener intacta su árbol de trabajo.

  • incremental de añadir cambios y comprometerse ellos, haciendo tantas confirmaciones como se desee. add -p puede ser útil añadir sólo algunos de los cambios en un archivo determinado. Uso commit -c ORIG_HEAD si desea volver a utilizar el original mensaje de confirmación para un determinado cometió.

  • Si desea probar lo que estás cometiendo (buena idea!) El uso git stash para esconderse la parte que no ha cometido (o stash --keep-index, incluso antes de cometerlo), prueba, a continuación, devolver el git stash pop descansar al árbol de trabajo. Mantenga haciendo confirmaciones hasta que conseguir todas las modificaciones comprometidos, es decir, tener un árbol de trabajo limpia.

  • Ejecutar git rebase --continue proceder a la aplicación de las confirmaciones después de la ahora dividida comprometerse.

Otros consejos

Así es como hacerlo con Magit .

Say cometer ed417ae es el que desea cambiar; que contiene dos cambios no relacionados y está enterrado bajo una o más confirmaciones. ll golpe para mostrar el registro, y vaya a ed417ae:

registro inicial

A continuación, golpeó r para abrir la ventana emergente de rebase

popup rebase

y m para modificar el commit en el punto.

Aviso cómo el @ hay ahora en el commit desea dividir - que significa cabeza está ahora en esa confirmación:

modificación de una confirmación

Queremos mover la cabeza a los padres, por lo que navegar a la matriz (47e18b3) y el golpe x (magit-reset-quickly, con destino a o si está usando evil-magit) y entrar a decir "sí que significaba cometer en el punto". Su registro debe parecerse a:

log después de restablecer

Ahora, golpe q para ir al estado de Magit regular, a continuación, utilizar el comando u unstage regular para unstage lo que no van en la primera c cometer, cometer el resto, como de costumbre, a continuación, stage y commit lo que va en el segundo comprometerse, y cuando se hace: golpe r para abrir la ventana emergente de rebase

popup rebase

y otro r continúen, y ya está! ll ahora muestra:

all registro hecho

Para dividir una confirmación <commit> y agregar el nueva comprometerse antes de éste , y la fecha autor de <commit>, - los pasos son los siguientes:

  1. Editar el cometer antes de <commit>

    git rebase -i <commit>^^
    

    Nota:. Tal vez será también necesario para editar <commit> así

  2. selección de la cereza <commit> en el índice

    git cherry-pick -n <commit>
    
  3. interactiva restablecer cambios innecesarios de índice y restablecer el árbol de trabajo

    git reset -p && git checkout-index -f -a
    

    Como alternativa, simplemente esconder cambios innecesarios de forma interactiva: git stash push -p -m "tmp other changes"

  4. Haga otros cambios (si existe) y crear el nuevo commit

    git commit -m "upd something" .
    

    Opcionalmente, repita los artículos 2-4 añadir commit más intermedios.

  5. Continuar rebase

    git rebase --continue
    

Si no ha presionado sin embargo, sólo tiene que utilizar git rebase. Aún mejor, el uso git rebase -i a medida destina alrededor interactiva. Se puede mover el infractor se comprometen a la parte delantera, y luego dividirlo como te gusta y mover los parches de vuelta (si es necesario).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top