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 ningunarebase
solorebase
s. Cuando queremos entregar (push
) Y a X, nos gustaría hacer unarebase
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 engit 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