2010-08-12 16 views
5

Así, ayer registró una question con respecto a algunos conflictos extraños cuando trataba de rebasar una rama aguas arriba en mi rama tema local.`git rebase`

Al final he usado git rebase --merge upstream y resuelto muchos conflictos en archivos que no he tocado desde el rebase anterior.

Mi comprensión de rebase en tal caso es que separa mis confirmaciones de esa rama de tema, aplica las confirmaciones de la rama ascendente, y luego aplica (como parches) mis confirmaciones sobre las anteriores. Entonces, termina siendo una operación de avance rápido. Lo que no entiendo es ... ¿por qué debería tener conflictos de combinación con esas confirmaciones que provienen de aguas arriba. ¿Son los aplicados como parches también? Pensé ... es sólo el acto de "soldadura" algunas confirmaciones en la parte superior de la confirmación anterior que provenían de la misma rama?

Estoy preguntando esto porque tuve mucho de conflictos en los archivos que no he tocado. Ah, y hago rebases diarias con esta rama ascendente.

ACTUALIZACIÓN

he dado cuenta de que solo algunas de las confirmaciones traídas de aguas arriba a mi sucursal tema tienen su SHA-1 Identificación cambió. ¿Alguien sabe qué podría hacer que Git le haga esto? ¿Podría ser el interruptor --merge?

Mi versión es 1.5.6.5 git

+0

¿Tiene algún tipo de conversión automática como en http://stackoverflow.com/questions/1042207/git-svn-rebase-fails? – VonC

+0

@VonC 'core.autocrlf' está en blanco, lo que supongo que tiene el valor predeterminado de" entrada ". ¿Podría ser por esto? No estoy seguro de cómo puedo reproducir el problema ahora, para ver si establecerlo en falso hace alguna diferencia. –

+0

ţ: asegúrese de configurarlo en falso, solo para estar seguro. – VonC

Respuesta

2

Rebase re-escribe la historia. Si rebases los commits que ya han sido enviados a un control remoto, estás ingresando a un mundo de daño. Incluso peor si continúas rebase de esta manera. Rebase tiene sus avantages a veces, pero es especialidad herramienta IMO, no casual herramienta, como merge.

y luego aplica (como parches) mi compromiso en la parte superior.

Sí, como nueva comete

Por lo tanto, termina siendo una operación de avance rápido

No. Un avance rápido es simplemente moviendo el puntero de ese HEAD rama. Está presentando nuevos objetos desde remoto y luego aplicando parches sobre eso.

Si su local y remota Última sincronizados en A1, y decir que agregó (localmente) A2 y A3 confirmaciones, y encontró que el control remoto se había añadido B1 y B2, cambio de base se esconder A2 y A3, tirar hacia abajo B1 y B2 (debe haber un avance rápido, ya que comparten un descendiente común A1), y luego aplicar parches para A2 y A3como nuevas confirmaciones (de ahí nuevos SHA-1) A2' y A3'.

Así que ahora su historia local es: A1 - B1 - B2 - A2' - A3' que no es un avance rápido.

+1

Conozco los peligros de la rebase, y no estoy usando rebase así. Sin embargo, por alguna razón, cuando publiqué esta pregunta tuve conflictos extraños en los archivos que no he tocado. Se sabe que Rebase produce menos conflictos que merge, pero no funcionó así para mí en ese entonces. De ahí mi pregunta. No he encontrado la causa, ni la reproduzco. –