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 nadarebase
más quemerge
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 hacerlo se rebase
nos pide que hagamos todas las fusiones que ya hicimos en los merge
pasos 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 dev
actualizar su árbol de trabajo para que coincida con ladev
rama. 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 --squash
es 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-branch
y desea volver a establecer la basemaster
, haga lo siguiente:fuente
Dos observaciones:
git rerere
, lo que se hace para este tipo de situación.Ver más en
git rerere
.fuente
Puede tomar todos los cambios en su rama y ponerlos en una nueva confirmación
master
con 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 true
Lo ú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