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únrebase
sino solomerge
s. Cuando queremos entregar (push
) Y a X nos gustaría hacer unrebase
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.
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.
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
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.
Ver más engit rerere
.
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.
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