¿Cómo se modifican los cambios de la rama actual además de los cambios que se fusionan?

144

Bueno. Si estoy en una rama (por ejemplo working), y quiero fusionar los cambios de otra rama (por ejemplo master), entonces ejecuto el comando git-merge mastermientras estoy en la workingrama, y ​​los cambios se fusionan sin cambiar el historial. Si ejecuto git-rebase master, los cambios masterse vuelven a colocar en la parte superior de mi workingrama. Pero, ¿qué pasa si quiero fusionarme en los cambios masterpero cambiar mis cambios workingpara estar en la cima? ¿Cómo puedo hacer eso? Se puede hacer?

Podría ejecutar git-rebase workingmi masterrama para poner mis cambios en la parte superior de la masterrama, pero me gustaría poder hacerlo en mi workingrama, y ​​no tengo idea de cómo. Lo más cercano que puedo pensar es crear una nueva rama mastery luego cambiar workinglos cambios por encima de eso, pero luego tendría una nueva rama en lugar de alterarla working.

Jonathan M Davis
fuente

Respuestas:

255

Tienes lo que rebasehace al revés. git rebase masterhace lo que está pidiendo: toma los cambios en la rama actual (ya que es divergente del maestro) y los reproduce en la parte superior master, luego establece el encabezado de la rama actual para que sea la cabeza de esa nueva historia. Que no reproducir los cambios de masteren la parte superior de la rama actual.

hobbs
fuente
3
@ Jonathan es genial. Este es un tema un poco complicado. Por cierto, git rebase workingse movería master's cambios (después de que el punto de que workingse ramificó) para estar en la parte superior de la workingrama - pero eso no es una cosa muy sensible a hacer a master:)
Hobbs
66

Otra forma de verlo es considerarlo git rebase mastercomo:

Rebase la rama actual encima de master

Aquí, ' master' es la rama ascendente , y eso explica por qué, durante un rebase, oursy theirsse invierte .

VonC
fuente
Eso también explica por qué LOCAL y REMOTO están invertidos. Gracias.
AVIDeveloper
@AVIDeveloper en LOCAL y REMOTO, también puede leer stackoverflow.com/a/3052118/6309
VonC
55
@@ VonC: Gracias. Sí, después de pasar una tarde murmurando para mí mismo "REMOTO es mi rama ... LOCAL no es mío", todo se hundió. Honestamente, hubiera preferido ver los nombres de las ramas (o abreviados. SHA) en lugar de REMOTO / LOCAL / la nuestra / la suya / la mía Mis pensamientos son los mismos con respecto a la git difftoolhorrible izquierda / derecha. Un poco fuera de tema, pero difftoolme quedo con git-meld y disfruto de nombres como 'working-dir', 'stash @ {0}', etc.
AVIDeveloper
1
@VonC: ¿Puede explicar cómo puede ser que después de que lo hagamos: git checkout branch_to_update git rebase masteringrese en git log las confirmaciones de master en la parte superior de la rama local, en lugar de lo contrario?
JavaSa
1
@JavaSa ¿Eso es extraño, a menos que el rebase no se haya completado correctamente? Es posible que deba hacer una pregunta por separado con más detalles.
VonC