No creo que esto sea lo que significa la pregunta. Una fusión inversa en SVN también revierte los cambios de la confirmación a cambios locales, por lo que puede editarlos y confirmar nuevamente.
Para crear una nueva confirmación que 'deshaga' los cambios de una confirmación anterior, use:
$ git revert <commit>
También es posible eliminar una confirmación de un punto arbitrario en el pasado al cambiar el nombre y luego restablecer, pero realmente no desea hacerlo si ya ha enviado sus confirmaciones a otro repositorio (o alguien más se ha retirado de usted) .
Probablemente deba proporcionar una -m <parent number>opción git revertpara especificar qué cambio revertir. Si desea deshacer una combinación de historial no publicado, use git reset --hard HEAD^1.
Jakub Narębski el
3
Jakub: eso es cierto si revierte una confirmación de fusión, pero en la terminología de Subversion, "fusión inversa" es en realidad simplemente el nombre para revertir cualquier tipo de confirmación.
Ben James
44
¡Tenga en cuenta que usar -msignifica que una fusión futura de la rama no fusionada no incluirá los cambios anteriores a esa fusión! Consulte schacon.github.com/git/howto/revert-a-faulty-merge.txt para conocer las formas adecuadas de volver a fusionar una rama no fusionada.
Martijn Pieters
125
Para revertir una combinación de cometer, es necesario utilizar: git revert -m <parent number>. Entonces, por ejemplo, para revertir la confirmación de fusión más reciente usando el padre con el número 1, usaría:
git revert -m 1 HEAD
Para revertir una confirmación de fusión antes de la última confirmación, debería hacer lo siguiente:
git revert -m 1 HEAD^
Use git show <merge commit SHA1>para ver a los padres, la numeración es el orden en que aparecen, por ejemploMerge: e4c54b3 4725ad2
¿Cómo puede obtener el 'número' asociado con el padre? ¿Las ramas tienen una 'identificación' numérica intrínseca?
daniyalzade
77
Se usa git show <merge commit SHA1>para ver a los padres, la numeración es el orden en que aparecen, por ejemploMerge: e4c54b3 4725ad2
supermétodo
8
ejemplo: git revert -m 1 SHA1Ese comando funcionó para mí para revertir un commit de fusión que era varios commits de fusión antes del encabezado y tenía muchos commits debajo.
c.apolzon
3
¿Cuáles son los padres? E4c54b3 o 4725ad2?
Dolphin
1
Esto todavía no proporciona suficiente información sobre cómo los resultados de git show se relacionan con los números principales. ¿El "orden en que aparecen" se basa en 1? Basado en 0? En este ejemplo específicamente, ¿cuál es el SHA1 del padre 1? e4c54b3 o 4725ad2?
cowlinator
4
Si te entiendo correctamente, estás hablando de hacer un
svn merge -rn:n-1
para retirarse de una confirmación anterior, en cuyo caso, probablemente esté buscando
Esto descarta el commit de fusión, que no hace lo que el póster original está pidiendo. El OP está intentando hacer un parche inverso para deshacer los cambios anteriores, no borrar el historial de los cambios anteriores por completo.
-1
Si no desea comprometerse, o desea hacerlo más tarde (el mensaje de confirmación aún estará preparado para usted, que también puede editar):
Respuestas:
Para crear una nueva confirmación que 'deshaga' los cambios de una confirmación anterior, use:
También es posible eliminar una confirmación de un punto arbitrario en el pasado al cambiar el nombre y luego restablecer, pero realmente no desea hacerlo si ya ha enviado sus confirmaciones a otro repositorio (o alguien más se ha retirado de usted) .
fuente
-m <parent number>
opcióngit revert
para especificar qué cambio revertir. Si desea deshacer una combinación de historial no publicado, usegit reset --hard HEAD^1
.-m
significa que una fusión futura de la rama no fusionada no incluirá los cambios anteriores a esa fusión! Consulte schacon.github.com/git/howto/revert-a-faulty-merge.txt para conocer las formas adecuadas de volver a fusionar una rama no fusionada.Para revertir una combinación de cometer, es necesario utilizar:
git revert -m <parent number>
. Entonces, por ejemplo, para revertir la confirmación de fusión más reciente usando el padre con el número 1, usaría:Para revertir una confirmación de fusión antes de la última confirmación, debería hacer lo siguiente:
Use
git show <merge commit SHA1>
para ver a los padres, la numeración es el orden en que aparecen, por ejemploMerge: e4c54b3 4725ad2
documentación de combinación de git: http://schacon.github.com/git/git-merge.html
Discusión de fusión de git (confusa pero muy detallada): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt
fuente
git show <merge commit SHA1>
para ver a los padres, la numeración es el orden en que aparecen, por ejemploMerge: e4c54b3 4725ad2
git revert -m 1 SHA1
Ese comando funcionó para mí para revertir un commit de fusión que era varios commits de fusión antes del encabezado y tenía muchos commits debajo.Si te entiendo correctamente, estás hablando de hacer un
para retirarse de una confirmación anterior, en cuyo caso, probablemente esté buscando
fuente
Use el comando anterior para revertir los cambios de fusión.
fuente
Si no desea comprometerse, o desea hacerlo más tarde (el mensaje de confirmación aún estará preparado para usted, que también puede editar):
fuente