Tengo la siguiente situación:
- Creé una
clone(Y) a partir de un repositorio principal (X), porque había muchas personas trabajando en Y, no hicimos nadarebasemás quemerges. Cuando queremos entregar (push) Y a X, nos gustaría hacer unarebasepara tener las cosas agradables y limpias
El problema es que al hacerlo se rebasenos pide que hagamos todas las fusiones que ya hicimos en los mergepasos anteriores . ¿Hay una solución para esto, además de la que significa volver a hacer las fusiones?
Esperaba que fuera bastante sencillo, ya que resolvimos las fusiones conflictivas.
git
merge
rebase
git-rebase
EN S
fuente
fuente

Respuestas:
Rebasar para obtener un historial "limpio" está sobrevalorado. La mejor manera si desea conservar el historial es simplemente hacer la fusión en lugar de una rebase. De esa forma, si alguna vez necesita volver a una revisión, es exactamente la misma que probó 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 del maestro, verificarla y luego
git read-tree -u -m devactualizar su árbol de trabajo para que coincida con ladevrama. Luego, puede comprometer todo en un gran compromiso y fusionarlo con el maestro como de costumbre.fuente
--squash. Una fusión regular agregará N o N + 1 confirmaciones al maestro si hubiera N confirmaciones en la rama. La sugerencia anterior, omerge --squash, siempre agregará solo una confirmación al maestro.git merge --squashes ahora mi forma preferida de rebase después de una gran cantidad de trabajo y muchas fusiones ( consulte esta respuesta ). Si se llama a la rama en la que está trabajandomy-branchy desea volver a establecer la basemaster, haga lo siguiente:fuente
Dos observaciones:
git rerere, lo que se hace para este tipo de situación.git rerere.fuente
Puede tomar todos los cambios en su rama y ponerlos en una nueva confirmación
mastercon lo siguiente:Luego organice sus archivos y confíe.
fuente
Con respecto a la repetición de conflictos de fusión, puede usar git rerere para mantener una base de datos de cómo ya se han resuelto los conflictos de fusión, de modo que realizar una rebase que dé como resultado los mismos conflictos hará que las partes laboriosas se realicen automáticamente.
https://hackernoon.com/fix-conflicts-only-once-with-git-rerere-7d116b2cec67
git config --global rerere.enabled trueLo único que debe tener en cuenta es que si resolvió algo incorrectamente , la próxima vez también se solucionará automáticamente y es posible que no se dé cuenta.
Documentación más formal aquí: https://git-scm.com/docs/git-rerere
fuente