No creo que haya una forma de simular lo que sucederá hasta que intentes la fusión. Sin embargo, si se asegura de que la salida de git statusesté vacía antes de hacer la fusión, es bastante seguro seguir adelante e intentarlo. Si tiene conflictos, puede volver inmediatamente al estado en el que se encontraba antes con:
git reset --merge
Desde git 1.7.4, también puede abortar la fusión haciendo:
La respuesta de @ Amber es responder exactamente lo que se pregunta "cómo simular la fusión". usar --no-commites mucho más fácil en mi opinión
samirahmed
14
@samirahmed: @Amber respondió la pregunta más literalmente, claro, aunque con --no-committodavía estás cambiando el índice y el árbol de trabajo, que no es exactamente "sin hacer ningún cambio" :) Mi punto es que cuando la gente pregunta este tipo de pregunta, generalmente es porque no son conscientes de que la mejor manera de ver cómo funcionaría una fusión es simplemente intentar la fusión , a menudo porque no son conscientes de lo fácil que es volver al estado en el que se encontraban antes si resultó haber problemas.
Mark Longair
2
No sé si esto se agregó en una versión más reciente de git, pero en los documentos (1.8.4) dice " git merge --abortes equivalente a git reset --mergecuándo MERGE_HEADestá presente", así que lo que sea más fácil de recordar :)
Samuel Meacham
@SamuelMeacham: gracias por señalarlo, se introdujo en 1.7.4. He actualizado la respuesta con eso. ¡Gracias!
Mark Longair
Esta sugerencia no hizo nada por mí, en git 1.9.4.
djangofan
137
Puede usar git merge --no-commitpara evitar que la fusión se confirme realmente, y si no le gusta cómo funciona la fusión, simplemente restablezca el encabezado original.
Si definitivamente no desea finalizar la fusión, incluso si es un avance rápido (y por lo tanto no tiene conflictos, por definición), también puede agregar --no-ff.
También puedes hacer git checkout --detachy probar lo que quieras. Más tarde, si desea conservar sus cambios, hágalo git checkout -b new_branch. Y si desea tirar sus cambios, verifique cualquier rama que desee ( git checkout master).
Shayan Toqraee
Si topic_branches enorme (como probablemente sea el caso si está en esta pregunta en primer lugar), el diff masterresultado es probablemente demasiado grande para que pueda mirarlo si una fusión va a causar conflictos.
Crescent Fresh
Definitivamente me gusta mucho ... seguro y simple.
Negarse a fusionarse y salir con un estado distinto de cero a menos que el HEAD actual ya esté actualizado o la fusión se pueda resolver como un avance rápido.
No es realmente una simulación porque habrá una fusión de avance rápido en caso de que no haya conflictos entre las dos ramas. Pero en caso de conflictos, se le informará y no pasará nada.
He podido usar git merge --abort, recientemente. Sin embargo, esto solo se puede usar si hay un conflicto de fusión. Si está seguro de que no desea comprometerse, utilice los otros métodos mencionados anteriormente.
¿Qué otros métodos mencionados anteriormente? Todos lo mencionan git merge --abort. Debería comprobar su respuesta en el futuro especificando quién escribió la respuesta a la que se refiere.
Michael Fulton
3
¿Por qué no simplemente crear una rama desechable (git checkout -b) y hacer una fusión de prueba allí?
Lo que sugiere es en realidad la respuesta de Ian expresada
brevemente
0
No sé exactamente si es tu caso , pero tu pregunta recuerda que a veces comienzo una función, me comprometo a lo largo de los días y combino el desarrollo muchas veces.
En este punto, pierdo el control sobre los archivos exactos que cambié y solo lo sabré cuando se cerró mi función y mi código se desarrolló.
En este caso, una buena manera de saber qué modificaciones realizó (no otras de las fusiones) es usar Sourcetree.
Debe hacer clic con el botón derecho en la rama base y seleccionar Diff Against Current:
Luego, sourcetree le mostrará todas las modificaciones que se fusionarán si fusiona su rama en la rama base.
Por supuesto, no le mostrará los conflictos, pero es una herramienta útil en las fusiones.
Respuestas:
No creo que haya una forma de simular lo que sucederá hasta que intentes la fusión. Sin embargo, si se asegura de que la salida de
git status
esté vacía antes de hacer la fusión, es bastante seguro seguir adelante e intentarlo. Si tiene conflictos, puede volver inmediatamente al estado en el que se encontraba antes con:Desde git 1.7.4, también puede abortar la fusión haciendo:
(Como explica el mensaje de confirmación que agregó esa opción , esto se agregó para mantener la coherencia,
git rebase --abort
etc.)fuente
--no-commit
es mucho más fácil en mi opinión--no-commit
todavía estás cambiando el índice y el árbol de trabajo, que no es exactamente "sin hacer ningún cambio" :) Mi punto es que cuando la gente pregunta este tipo de pregunta, generalmente es porque no son conscientes de que la mejor manera de ver cómo funcionaría una fusión es simplemente intentar la fusión , a menudo porque no son conscientes de lo fácil que es volver al estado en el que se encontraban antes si resultó haber problemas.git merge --abort
es equivalente agit reset --merge
cuándoMERGE_HEAD
está presente", así que lo que sea más fácil de recordar :)Puede usar
git merge --no-commit
para evitar que la fusión se confirme realmente, y si no le gusta cómo funciona la fusión, simplemente restablezca el encabezado original.Si definitivamente no desea finalizar la fusión, incluso si es un avance rápido (y por lo tanto no tiene conflictos, por definición), también puede agregar
--no-ff
.fuente
git merge --abort
exista, ¿tal vez quieres decirgit reset --merge
?rebase
que no existe una--abort
paragit merge
.--no-ff
. Para evitar que se produzca una fusión ff.--no-ff
es bastante obligatorio aquí, ya--no-commit
que no detiene los cambios de avance rápido.Si quiero comparar los cambios en una rama de tema para dominar, me parece más fácil y seguro hacer lo siguiente:
Después de completar la fusión, es fácil ver el cambio consolidado de maestro
Cuando termine, simplemente elimine la rama trial_merge
De esta manera, la rama maestra nunca cambia.
fuente
git checkout --detach
y probar lo que quieras. Más tarde, si desea conservar sus cambios, hágalogit checkout -b new_branch
. Y si desea tirar sus cambios, verifique cualquier rama que desee (git checkout master
).topic_branch
es enorme (como probablemente sea el caso si está en esta pregunta en primer lugar), eldiff master
resultado es probablemente demasiado grande para que pueda mirarlo si una fusión va a causar conflictos.Yo suelo :
de acuerdo con la documentación :
No es realmente una simulación porque habrá una fusión de avance rápido en caso de que no haya conflictos entre las dos ramas. Pero en caso de conflictos, se le informará y no pasará nada.
fuente
He podido usar
git merge --abort
, recientemente. Sin embargo, esto solo se puede usar si hay un conflicto de fusión. Si está seguro de que no desea comprometerse, utilice los otros métodos mencionados anteriormente.fuente
git merge --abort
. Debería comprobar su respuesta en el futuro especificando quién escribió la respuesta a la que se refiere.¿Por qué no simplemente crear una rama desechable (git checkout -b) y hacer una fusión de prueba allí?
fuente
No sé exactamente si es tu caso , pero tu pregunta recuerda que a veces comienzo una función, me comprometo a lo largo de los días y combino el desarrollo muchas veces.
En este punto, pierdo el control sobre los archivos exactos que cambié y solo lo sabré cuando se cerró mi función y mi código se desarrolló.
En este caso, una buena manera de saber qué modificaciones realizó (no otras de las fusiones) es usar Sourcetree.
Debe hacer clic con el botón derecho en la rama base y seleccionar
Diff Against Current
:Luego, sourcetree le mostrará todas las modificaciones que se fusionarán si fusiona su rama en la rama base.
Por supuesto, no le mostrará los conflictos, pero es una herramienta útil en las fusiones.
fuente