git rebase usando sourcetree

83

Creo que estoy confundido sobre cómo usar SourceTree GUI para hacer git rebase. Tengo dos ramas "master" y "dev". Como se ve, las dos ramas divergieron. Quiero hacer una rebase en la rama "dev", usando la línea de comando, esto sería:

git checkout dev
git rebase master

ingrese la descripción de la imagen aquí

Hubiera esperado hacer clic derecho en "dev" y elegir "Rebasar los cambios actuales en dev". Supongo que los cambios actuales significan "nuevas confirmaciones en el maestro". Pero elegir esta opción parece no tener ningún efecto. ¿Cuáles serían los pasos correctos?

python152
fuente

Respuestas:

117

Pero elegir esta opción parece no tener ningún efecto.

Sí, porque los cambios actuales son los de las ramas actuales, que es dev.

Volver deva basarse en la parte superior devsignifica una no operación .

git checkout dev
git rebase master

Eso significa: la rama actual es dev: para volver a basarse en la parte superior de master.

Entonces, en SourceTree, debe hacer clic derecho en master(mientras devestá desprotegido) y seleccionar:

Rebase current changes onto master

Howe agrega en los comentarios :

El nombre actual de " rebase current changes onto [branch]" es engañoso. Consulte esta discusión sobre mejorasSRCTREE-1578 .

Después de encontrarme desconcertado al intentar actualizar una rama de características con el desarrollo y fallar, me di cuenta de que el elemento del menú contextual del panel izquierdo etiquetado como " rebase current changes onto $somebranch" en realidad hace lo contrario de lo que sugiere su nombre:
vuelve a clasificar la rama actual al estado de $ somebranch;
En otras palabras, vuelve a basarse $somebranchen (o en) la rama actual, no al revés. (¿Derecho?)

La preposición “ onto” en el texto actual es engañosa; implica que el objeto de la oración ( $somebranchen mi ejemplo) recibirá los cambios.
De hecho, ocurrirá lo contrario.
La ausencia del nombre de la sucursal actual aumenta la confusión.

Una nueva redacción que mejore la estructura de la oración e incluya el nombre de la rama afectada proporcionaría una gran ventaja para la claridad.
Por ejemplo:

rebase $currentbranch to head of $somebranch
rebase $somebranch onto $currentbranch
VonC
fuente
13
Para el contexto, el voto negativo es del hombre muerto que publicó una respuesta antes sin dirigirse a SourceTree en absoluto. Voté en contra y expliqué mis críticas en un comentario. Aparentemente, el hombre muerto no apreció los comentarios constructivos que hice.
VonC
1
¿Cambiará eso la rama maestra? Solo me gustaría actualizar mi rama de desarrollo con los últimos cambios de la rama maestra, y luego fusionar mi rama de desarrollo en maestra. ¿La forma descrita hará esta tarea?
Gerfried
2
@Gerfried estuvo de acuerdo. Siempre que no se haya presionado dev, puede volver a establecer la base sobre master.
VonC
14
Sourcetree debería cambiar la redacción a "Rebasear los últimos cambios de Master a Dev" para una mejor aclaración.
Timo
3
El nombre actual de "rebase los cambios actuales en [rama]" es engañoso. Consulte esta discusión sobre mejoras: jira.atlassian.com/browse/SRCTREE-1578 .
Zihao Zhao