2010-04-15 26 views
10

¿Es posible fusionar los cambios de un repositorio central a una sucursal local sin tener que confirmar/ocultar las modificaciones en la sucursal local y el maestro de pago y envío?git fusionando cambios en la sucursal local

Si estoy trabajando en el "trabajo" de la sucursal local y hay algunos cambios sin compromiso, utilizo los siguientes pasos para obtener actualizaciones del repositorio central en mi rama de trabajo.

git stash 
git checkout master 
git pull 
git checkout work 
git rebase master 
git stash pop 

Por lo general, no hay cambios sin compromiso en "trabajo" y luego omito los pasos del alijo.

Lo que realmente me gustaría es algo como lo siguiente:

git pull master (updates master while work branch is checked out and has changes) 
git rebase master (rebases the updates into work branch uncommited changes are still safe) 

¿Hay algo más fácil de lo que actualmente hago?

+0

me sorprende que esto sigue siendo tan difícil de hacer en Git. Como usuario de SVN desde hace mucho tiempo, esta funcionalidad incorporada (combinando sin problemas los cambios remotos en una copia de trabajo modificada) es algo en lo que mi equipo confió a diario. – Spongman

Respuesta

12

Usted puede hacer (en la rama work):

git stash 
git pull --rebase origin master 
git stash apply 

git pull --rebase tanto tira cambios remotas y rebasa los cambios locales en la parte superior de los más remotos. Es decir. esencialmente hace lo que muestra en su script.

Los cambios locales, por supuesto, deben estar comprometidos o escondidos en merge o rebase (porque si sucede conflicto de combinación, los cambios en conflicto deben estar comprometidos para que usted pueda resolver ellos - pero ¿dónde los cambios locales ir entonces?)

Cuando más tarde decida actualizar master y fusionar work bifurcar con él, no causará problemas, ya que los cambios realizados son los mismos. Por lo tanto, no tiene que actualizar master cuando realiza cambios.

+1

Gracias @Pavel y @Pran. Esto funciona, lo que necesitaba saber es que no era necesario actualizar el maestro en este punto. Se actualizará cuando el trabajo se fusione en el maestro. – ScottS

+0

Funciona. ¡Gracias! –

2

No creo que pueda tirar si tiene cambios no confirmados.

Por lo tanto, se podría hacer algo a lo largo de las líneas de:

git stash 
git pull --rebase <remote> <branch> # Calls rebase instead of merge. 
git stash pop 
0

Tal vez las cosas han cambiado desde 2010, pero se puede tirar de un mando a distancia, incluso si tiene cambios uncommited. Sus cambios locales permanecerán sin compromiso, por lo que puede diferirlos o fusionarlos cuando lo desee.

git pull origin master 

probado con la versión git 1.9.5.msysgit.1

De this SO answer

Cuestiones relacionadas