2011-04-27 12 views
12

Cuando comencé a usar hg, la actualización parecía tener una capacidad casi mágica para tomar los nuevos cambios e integrarlos en mi repositorio local. Últimamente, sin embargo, noto que incluso si mis cambios locales no entran en conflicto con los cambios recién sacados de otro lado, siempre tengo que fusionarme, lo que resulta en un conjunto de cambios adicional que duplica un montón de cambios que ya tengo en uno de mis líneas de código locales (cabezas).Mercurial: ¿Por qué a veces necesito fusionarme después de una extracción en lugar de simplemente actualizar?

Quiero entender qué es lo que provoca que hg requiera una fusión, en lugar de solo suavizar todos los cambios junto con la actualización. Un conflicto debe requerir claramente una fusión. ¿Qué más?

Respuesta

20

La necesidad de fusionar vs. actualizar no se trata de si los cambios entran en conflicto, se trata de si tiene una división en el historial de confirmaciones. Si usted tiene un historial de esta manera:

[A]--[B]--[C]--UNCOMMITTEDCHANGESHERE 

y se tira hacia abajo - [D] los cambios uncomitted se combina con D cuando se actualiza.

Si, por el que se han comprometido para que tenga:

[A]--[B]--[C]--[E] 

y tire usted tiene:

[A]--[B]--[C]--[E] 
      \ 
       -[D] 

y tendrá que fusionarse para bajar a un solo cabeza.

Para el registro, esa es una mejor idea. La actualización con cambios no confirmados es una acción irreversible, que siempre da un poco de miedo. Si se ha comprometido, siempre puede deshacer/rehacer una combinación hasta que esté satisfecho con la combinación.

P.S. Es probable que alguien sugiera la extensión fetch, y están completamente equivocados.

+0

Entonces, en una nota relacionada: si rebase en lugar de fusionar, ¿eso mantiene una sola línea de código contigua? Me di cuenta de que hgsubversion requiere esto si quieres poder regresar a SVN, y eso tiene más sentido a la luz de esta información. –

+2

Rebasing produce una historia lineal, pero es una historia lineal ligeramente deshonesta (porque el desarrollo no fue lineal, sino simultáneo). Algunas personas prefieren eso, pero prefiero que mi historia refleje de manera verdadera y precisa el orden en que se cometieron las cosas. Todo se trata de preferencia personal (o política del equipo) al final. –

+0

Por curiosidad, ¿por qué es "incorrecto"? Sé que está en desuso, pero no por qué –

Cuestiones relacionadas