trucos tag que name hace conectar con commits commands comentarios codigos git merge rebase git-rebase

tag - git rebase después de la fusión git anterior



git tag name (4)

Tengo la siguiente situación:

  • Creé un clone (Y) de un repositorio principal (X), porque había mucha gente trabajando en Y, no hicimos ninguna rebase solo rebase s. Cuando queremos entregar ( push ) Y a X, nos gustaría hacer una rebase para tener las cosas agradables y limpias

El problema es que al hacer rebase nos pide que hagamos todas las fusiones que ya hicimos en los pasos de merge previos. ¿Hay alguna solución a esto, además de la que significa realmente volver a hacer las fusiones?

Esperaba que fuera bastante sencillo ya que ya resolvimos las fusiones conflictivas.


Dos observaciones:

  • puede volver a establecer la base de su propio trabajo (no realizado) tantas veces como desee además de las confirmaciones recién recuperadas.
  • Podrías evitar los conflictos de fusión (durante la rebase) si hubieras activado git rerere , que se hace para este tipo de situación.
    Ver más en git rerere .

Puede tomar todos los cambios en su rama y ponerlos en una nueva confirmación en el master con lo siguiente:

git diff master > my_branch.patch git checkout master patch -p1 < my_branch.patch

Luego, crea tus archivos y comprométete.


Rebasar para obtener una historia "limpia" está sobrevalorado. La mejor forma de preservar el historial es simplemente hacer la fusión en lugar de una rebase. De esta forma, si alguna vez necesita volver a una revisión, es exactamente la misma que la que probó durante el desarrollo. Eso también resuelve su problema sobre los conflictos de fusión resueltos previamente.

Si no te importa preservar el historial, puedes crear una nueva rama fuera de master, verificarlo, luego hacer un git read-tree -u -m dev para actualizar tu árbol de trabajo para que coincida con la rama dev . Entonces puedes comprometer todo en un gran compromiso y fusionarlo en maestro como siempre.


git merge --squash es ahora mi forma preferida de rebase después de una gran cantidad de trabajo y muchas fusiones ( ver esta respuesta ). Si la rama en la que está trabajando se llama my-branch y desea volver a establecer la base desde el master , solo haga lo siguiente:

git checkout my-branch git branch -m my-branch-old git checkout master git checkout -b my-branch git merge --squash my-branch-old git commit