Pregunta

Tengo que admitir que no he jugado con gits características avanzadas, pero en mi proyecto actual tenía que hacerlo.

La situación: Alguien trató de poner en práctica algunas de las características y los comitted al maestro, ahora me llamaron para hacer lo que esta otra persona trató de hacer (pero no), por lo tanto, lo primero que hice fue

git checkout -b clean_start HASH

Hash es un hash SHA1 correcta de unos 20 confirmaciones antes de que el maestro actual y que trabajado. Ahora hecho algunos cambios en esta rama, y ??ahora estoy en un punto en que me gustaría cambiar la rama principal actual del repositorio remoto (que tiene los cambios realizados por la otra persona) a mi sucursal local.

En otras palabras, me gustaría mover la cabeza del maestro 20 commits hacia atrás y luego fusionar mi nueva rama limpia en ella.

Es eso exactamente lo que tengo que hacer? Con la cabeza de reversión ~ 20 etc., o hay un comando que hace exactamente tal movimiento de cabeza?

¿Fue útil?

Solución

Se puede hacer esto, si el repositorio remoto acepta empuja forzado:

git push --force origin clean_start:master

Tenga en cuenta que si alguien tiene el repositorio clonado, un empujón de ellos potencialmente podría deshacer este . Si desea combinar su rama principal local y la rama principal remoto, pero mantener el árbol de archivos de su rama (descartando el árbol de archivos del maestro de origen), puede hacerlo de esta manera:

git merge -s ours --no-commit origin/master
git commit  # Separate step so that you can use your own commit message.
git checkout master
git merge clean_start  # Fast-forward
git push origin master

Esto crea una combinación de cometer con las dos ramas (tu amo y señor de origen) como su padre, pero el árbol será idéntica a la punta de la rama actual. En otras palabras, se creará una fusión simbólica donde se ha producido ninguna combinación de código real.

Si no le importa que otras personas que trabajan en el repositorio serán interrumpidos, puede utilizar el primer enfoque. Pero si se trabaja con otras personas que ya tienen estas confirmaciones, el segundo enfoque será más a toda prueba y mantendrá la historia.

Otros consejos

  1. Puede específicamente el punto principal a la que desea que sea con:

    git update-ref refs/heads/master clean_start
    

    (si realiza el seguimiento de los nuevos cambios en clean_start y quiere maestro a punto de allí)

    Tenga en cuenta que lo principal estaba apuntando a (unos 20 compromete la pena) se "perdió".

    tendrá que forzar el empuje del maestro debido a esto:

    git push origin master -f
    
  2. Si quiere salir de su maestro local donde está en su lugar y el lugar de empuje clean_start al maestro remoto, simplemente hacer esto:

    git clean_start origen empuje: master -f

    Espero que esto ayude.

    PS. Ejecutar gitk --all & primero para que pueda ver lo que está pasando visualmente como lo hace.

El git restablecer comando existe para los puntos de cambio de la cabeza a lo.

En su caso, usted puede hacer esto:

git checkout master              # switch to the master branch
git reset --hard clean_start     # point HEAD to the clean_start branch
git push -f origin master:master # force push the new HEAD to server
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top