2009-11-27 10 views
90

Con SVN es fácil fusionar de forma inversa una confirmación, pero ¿cómo hacer eso con Git?Git: cómo fusionar de forma inversa una confirmación?

+0

duplicados de [volver a una confirmación anterior Git ] (http://stackoverflow.com/questions/4114095/revert-to-a-previous-git-commit) –

+0

No creo que esto se deba a la pregunta. Una fusión inversa en SVN también revierte los cambios de la confirmación a los cambios locales, por lo que puede editarlos y volver a cometer. – Dormouse

Respuesta

92

Para crear un nuevo comprometen a que '' deshace los cambios de un pasado comprometen, utilice:

$ git revert <commit> 

también es posible que en realidad elimina un compromiso de un punto arbitrario en el pasado al volver a establecer la base de datos y luego restablecerlo, pero realmente no quieres hacer eso si ya has empujado tus commits a otro repositorio (o si alguien más ha sacado de ti).

+25

Probablemente necesites suministrar la opción '-m ' a 'git revert' para especificar qué cambio revertir. Si desea deshacer una fusión de historial no publicado, use 'git reset --hard HEAD^1'. –

+2

Jakub: eso es cierto si está revocando un commit de fusión, pero en la terminología de Subversion, "reverse-merge" es en realidad simplemente el nombre para revertir cualquier tipo de commit. –

+4

Tenga en cuenta que usar '-m' significa que una fusión futura de la rama no fusionada no incluirá los cambios antes de esa fusión. Consulte http://schacon.github.com/git/howto/revert-a-faulty-merge.txt para conocer las formas adecuadas de volver a combinar una rama no fusionada. –

4

Si he entendido bien, usted está hablando de hacer un

svn merge -rn:n-1 

a retirarse de una anterior comprometerse, en cuyo caso, usted está probablemente en busca de

git revert 
84

Para revertir una fusión, debe usar: git revert -m. Así, por ejemplo, para revertir la reciente más funden confirmar utilizando el padre con el número 1 se debería utilizar:
git revert -m 1 HEAD

Para revertir una combinación de cometer antes de la última confirmación, puede hacer:
git revert -m 1 HEAD^

Uso git show <merge commit SHA1> para ver a los padres, la numeración es el orden en que aparecen, por ejemplo Merge: e4c54b3 4725ad2

git documentación de fusión: http://schacon.github.com/git/git-merge.html

git discusión de combinación (confuso pero muy detallada): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt

+28

¿Cómo se puede obtener el 'número' asociado con el padre? ¿Las ramas tienen una "identificación" numérica intrínseca? – daniyalzade

+6

Use 'git show ' para ver a los padres, la numeración es el orden en que aparecen, p. 'Merge: e4c54b3 4725ad2' – supermethod

+4

ejemplo:' git revert -m 1 SHA1' Ese comando funcionó para mí para revertir un commit de fusión que era varias confirmaciones de fusión antes de la cabecera y tenía muchas confirmaciones debajo. –

-2
git reset --hard HEAD^ 

Usar el comando anterior para revertir fusionar los cambios.

+2

Esto descarta el compromiso de fusión, que no hace lo que el cartel original está pidiendo. El OP intenta hacer un parche inverso para deshacer cambios previos, no borrar por completo el historial de los cambios anteriores. –

-1

Si no quiere comprometerse, o quiere comprometerse más tarde (el mensaje del informe todavía será preparado para usted, que también se puede editar):

git revert -n <commit> 
Cuestiones relacionadas