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


Tengo la siguiente situación:

  • Creé un clone (Y) desde un repositorio principal(X), porque había mucha gente trabajando en Y no hicimos ningún rebase sino solo merges. Cuando queremos entregar (push) Y a X nos gustaría hacer un rebase para tener cosas agradables y limpias

El problema es que al hacer rebase se nos pide que hagamos todas las fusiones que ya hicimos en los pasos anteriores merge. ¿Hay una solución a esto, además de la que significa en realidad ¿re-hacer las fusiones?

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

Author: рüффп, 2011-06-06

4 answers

El cambio de base para obtener un historial "limpio" está sobrevalorado. La mejor manera si desea preservar la historia es simplemente hacer la fusión en lugar de una rebase. De esta manera, si alguna vez necesitas volver a una revisión, es exactamente el mismo que probaste durante el desarrollo. Eso también resuelve su problema sobre los conflictos de fusión previamente resueltos.

Si no le importa preservar el historial, puede crear una nueva rama fuera de master, comprobarlo, luego hacer un git read-tree -u -m dev para actualizar su trabajo árbol para que coincida con la rama dev. Luego puedes comprometer todo en un gran commit y fusionarlo en master como de costumbre.

 74
Author: Karl Bielefeldt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-06 22:16:33

git merge --squash ahora es 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ás trabajando se llama my-branch y quieres rebase desde master entonces solo haz 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
 83
Author: Jon Lemmon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:22

Dos observaciones:

  • puedes rebase tu propio trabajo (aún no enviado) tantas veces como quieras sobre las confirmaciones recién obtenidas.
  • Podría evitar los conflictos de fusión (durante el rebase) si tuviera activado git rerere, que se hace para este tipo de situación.
    http://git-scm.com/images/rerere2.png Ver más en git rerere.
 10
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-20 17:37:49

Puedes tomar todos los cambios en tu rama y ponerlos en un nuevo commit en master con lo siguiente:

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

Luego prepara tus archivos y confirma.

 2
Author: dbaston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-28 18:56:07