En mi repositorio tengo una rama llamada en la aq
que estoy trabajando.
Luego cometí nuevos trabajos y errores master
.
¿Cuál es la mejor manera de llevar esos commits a la aq
sucursal? ¿Crear otra nueva rama master
y fusionarla con aq
?
En mi repositorio tengo una rama llamada en la aq
que estoy trabajando.
Luego cometí nuevos trabajos y errores master
.
¿Cuál es la mejor manera de llevar esos commits a la aq
sucursal? ¿Crear otra nueva rama master
y fusionarla con aq
?
git pull origin my_branch_name
Respuestas:
Echa un vistazo a la
aq
rama y rebase demaster
.fuente
git merge
sería mejor. Si ambas ramas evolucionaron con el tiempo, debe considerar cuál es el mejor para usted.Debería poder hacerlo solo
git merge origin/master
cuando esté en su sucursal aq.fuente
rebase
si su sucursal es local y no ha sido presionadaorigin
. Úselomerge
si su rama ya está presionada.rebase
reescribirá la historia.Primero echa un vistazo a master:
Haz todos los cambios, revisa y confirma y empuja a tu maestro.
Regrese a su rama, 'aq', y combine master en ella:
Su sucursal estará actualizada con master. Un buen y básico ejemplo de fusión es 3.2 Git Branching - Ramificación y fusión básica .
fuente
No hay garantía de que las correcciones de errores maestros no estén entre otras confirmaciones, por lo tanto, no puede simplemente fusionarse. Hacer
asumiendo que esas confirmaciones representan las correcciones de errores.
Sin embargo, a partir de ahora, mantenga las correcciones de errores en una rama separada. Podrás simplemente
cuando quieras pasarlos todos a la rama de desarrollo regular.
fuente
O bien
cherry-pick
los commits relevantes en branchaq
o fusionan branchmaster
en branchaq
.fuente
Fusionarlo con
aq
fuente
Camino fácil
fuente
Para mí, ya tenía cambios y quería lo último de la rama base. No pude hacerlo
rebase
, y mecherry-pick
hubiera llevado una eternidad, así que hice lo siguiente:entonces en este caso:
fuente
Esto ( desde aquí ) funcionó para mí:
Citando:
fuente
Usted tiene un par de opciones.
git rebase master aq
en la rama que mantendrá los nombres de confirmación, pero NO REEMBOLSAR si se trata de una rama remota. Puedegit merge master aq
hacerlo si no le importa mantener los nombres de confirmación. Si desea mantener los nombres de confirmación y es una rama remota,git cherry-pick <commit hash>
las confirmaciones en su rama.fuente
También puede hacerlo ejecutando una sola línea.
git merge aq master
Esto es equivalente a
fuente
git merge a b
fusiona ramasa
yb
en la rama actual. Perogit merge a
cuando esté en la sucursala
no hará nada (por eso parece que está haciendo lo que cree que está haciendo). (Ver git-scm.com/docs/git-merge#Documentation/… .)EDITAR:
Mi respuesta a continuación documenta una forma de fusión
master
enaq
donde si ver los detalles de la fusión que enumera los cambios realizados enaq
antes de la fusión, no los cambios realizados enmaster
. Me he dado cuenta de que probablemente eso no sea lo que quieres, ¡incluso si crees que lo es!Sólo:
está bien.
Sí, esta combinación simple mostrará que los cambios
master
se realizaronaq
en ese punto, no al revés; pero eso está bien, ¡ya que eso es lo que sucedió! Más tarde, cuando finalmente fusiona su ramamaster
, es cuando una fusión finalmente mostrará todos sus cambios realizadosmaster
(que es exactamente lo que desea, y es el compromiso donde la gente esperará encontrar esa información de todos modos).Lo he verificado y el enfoque a continuación también muestra exactamente los mismos cambios (todos los cambios realizados
aq
desde la división original entreaq
ymaster
) que el enfoque normal anterior, cuando finalmente fusiona todo de nuevomaster
. Por lo tanto, creo que su única desventaja real (además de ser demasiado complejo y no estándar ...: - /) es que si revierte los cambios recientesgit reset --hard HEAD~<n>
y esto va más allá de la fusión, entonces la versión a continuación retrocede. rama 'incorrecta', que debe arreglar a mano (por ejemplo, congit reflog
&git reset --hard [sha]
).[Entonces, lo que antes pensaba era que:]
Hay un problema con:
porque los cambios que se muestran en la confirmación de fusión (por ejemplo, si mira ahora o más tarde en Github, Bitbucket o su visor de historial de git local favorito) son los cambios realizados en master, que bien pueden no ser lo que desea.
Por otra parte
muestra los cambios realizados en aq, que probablemente es lo que desea. (¡O, al menos, a menudo es lo que quiero!) ¡Pero la combinación que muestra los cambios correctos está en la rama incorrecta!
¡¿Como hacer frente?!
El proceso completo, que termina con una confirmación de fusión que muestra los cambios realizados en aq (según la segunda fusión anterior), pero con la fusión que afecta a la rama aq, es:
Esto: combina aq en master, avanza rápidamente esa misma combinación en aq, lo deshace en master y lo vuelve a poner en aq nuevamente.
Siento que me estoy perdiendo algo, esto parece ser algo que obviamente querrías y algo que es difícil de hacer.
Además, rebase NO es equivalente. Pierde las marcas de tiempo y la identidad de las confirmaciones realizadas en aq, que tampoco es lo que quiero.
fuente
Escenario:
Solución
fuente