2010-09-05 19 views
9

Acabo de empezar a utilizar Git y descubro que, mientras estoy implementando una función en una rama, encontraré algún error que realmente necesita ser enviado al tronco lo antes posible. Para hacerlo, uso el pago y envío para volver al trunk, hacer mis cambios y comprometerlos. Ahora tengo un baúl libre de errores.¿Cómo obtengo cambios de mi troncal en una sucursal?

Desafortunadamente, mi sucursal también necesita reparar este error. Como la función no está completa, no puedo simplemente fusionar la rama nuevamente en el tronco. ¿Cómo puedo modificar mi rama para que reciba los cambios que hice en el tronco?

Si es importante, estoy desarrollando por mi cuenta y tengo un único repositorio del que preocuparme.

Estoy usando TortoiseGit, así que las instrucciones específicas para eso serían útiles pero no necesarias.

Respuesta

18

Asegúrate de que tienes tu sucursal desprotegido (git checkout branch-name) y ejecutar

git rebase master

y resolver los conflictos que llegan.

Si no está seguro de lo que hacen estos comandos, intente no utilizar TortoiseGit y utilice el terminal. Te ayudará a entender realmente los comandos.

ADVERTENCIA: Esto supone una sucursal local. Si ha compartido la rama, no ejecute la rebase (porque modifica el historial). Ejecutar

git merge master

mientras que usted está en su otra rama. Esto tiene menos historia limpia, pero se puede usar.

La diferencia es:

  • Rebase - reescribe la rama sábana de maestro, repitiendo todos los cambios
  • Fusionar - una combinación de lo normal, creando una confirmación con dos padres
+0

Esto copiará todos los cambios que están en el maestro y no en su rama a su sucursal. También volverá a aplicar los cambios de sucursal para que aparezcan después de los cambios en el maestro en el historial del repositorio. –

+0

Sí, ¿no es ese el comportamiento deseado? Supongo que podrías hacer una selección de cerezas, pero eso debería evitarse si es posible. Depende de si tiene confirmaciones en el maestro que no desea en la otra rama. Sin embargo, ¿por qué tendrías esos commits en master, de todos modos? El maestro generalmente debe ser estable. – alternative

+0

En el caso general, en realidad debería fusionarse, pero debería fusionar una bifurcación de corrección de errores en lugar de fusionarse directamente. Puede crear la bifurcación de corrección de errores del ancestro común de todas las ramas que lo necesiten, luego combinarlo en todas ellas (en este caso, maestro y característica). Esto evita la fusión innecesaria de * otro * contenido del máster en su rama de características. – Cascabel

1

Si su el repositorio no está disponible para nadie más, entonces git rebase master como se sugiere arriba funcionará.

Si su repositorio está disponible públicamente, realmente no desea volver a establecer la base ya que puede arruinar a otros que hayan clonado su repositorio. En ese caso, desea utilizar git merge master para fusionar los cambios de la línea troncal en su rama de características.

Cuestiones relacionadas