develop branch
--> dashboard (working branch)
Utilizo git merge --no-ff develop
para fusionar cualquier cambio aguas arriba en el tablero
registro de git:
commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date: Mon Jul 30 08:16:46 2012 -0500
Merge branch 'develop' into dashboard
commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <[email protected]>
Date: Sun Jul 29 10:49:21 2012 -0500
fixed end date edit display to have leading 0
commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date: Sun Jul 29 09:13:24 2012 -0500
La fusión tenía más de 50 confirmaciones, y me pregunto cómo revertir la fusión para que el tablero vuelva al estado previo a la fusión.
La segunda parte de esto es, si no me fusiono --no-ff
, no obtengo el compromiso ' Fusionar rama' desarrollar 'en el tablero '. ¿Cómo revertiría esa fusión?
Respuestas:
Revertir un compromiso de fusión se ha cubierto exhaustivamente en otras preguntas. Cuando realiza una combinación de avance rápido, la segunda que describe, puede usar
git reset
para volver al estado anterior:Puede encontrar el
<commit_before_merge>
congit reflog
,git log
o, si siente el moxy (y no ha hecho nada más):git reset --hard HEAD@{1}
fuente
reflog
es un salvavidas.HEAD@{1}
simplemente describe el segundo estado más reciente de HEAD, o más técnicamente: "Una referencia seguida del sufijo @ con una especificación ordinal encerrada en un par de llaves (por ejemplo, {1}, {15}) especifica el enésimo valor anterior de ese árbitro."De aquí:
http://www.christianengvall.se/undo-pushed-merge-git/
Git revert agrega una nueva confirmación que revierte la confirmación especificada.
El uso de -m 1 le dice que se trata de una fusión y que queremos retroceder a la confirmación principal en la rama maestra. Usaría -m 2 para especificar la rama de desarrollo.
fuente
here
enlace en el comentario @Hilikus ya no es válido. El sitio afirma que el contenido se movió a un libro ( git-scm.com/book/en/v2 ), pero si es así, no es trivial ubicarlo allí.Simplemente restablezca la confirmación de fusión con
git reset --hard HEAD^
.Si usa --no-ff git siempre crea una fusión, incluso si no confirmó nada en el medio. Sin --no-ff git solo hará un avance rápido, lo que significa que las ramas HEAD se establecerán en HEAD de la rama fusionada. Para resolver esto, busque el commit-id al que desea volver y
git reset --hard $COMMITID
.fuente
Pero puede tener efectos secundarios inesperados. Ver
--mainline parent-number
opción en git-scm.com/docs/git-revertQuizás una forma bruta pero efectiva sería revisar el padre izquierdo de ese commit, hacer una copia de todos los archivos,
HEAD
volver a pagar y reemplazar todo el contenido con los archivos antiguos. ¡Entonces git te dirá lo que se revierte y crearás tu propio compromiso de reversión :)!fuente
Reverting a merge commit declares that you will never want the tree changes brought in by the merge. As a result, later merges will only bring in tree changes introduced by commits that are not ancestors of the previously reverted merge. This may or may not be what you want.
git reset
es la solución, pero también menciona que podría tener efectos secundarios inesperados. Sin embargo, ese enlace es degit revert
, nogit reset
:)git revert
nogit reset
Si fusionó la rama, revirtió la combinación utilizando una solicitud de extracción y fusionó esa solicitud de extracción para revertir.
La forma más fácil que sentí fue:
git revert -m 1 xxxxxx
(si la reversión se fusionó usando una rama) o usandogit revert xxxxxx
si fue una simple reversiónfuente