General
Suponiendo que tenemos nuestra web/app en producción en la rama master
, y queremos trabajar en una versión completamente nueva para reemplazar la versión de producción. Para esto vamos a necesitar crear una rama "huérfana", es decir, que no siga el historial de la actual master
, ya que sería imposible para Git crear un pull requests para mergearlas.
Creamos una nueva rama huérfana llamada v2
, donde vamos a desarrollar la nueva versión.
git checkout --orphan v2
Limpiamos el directorio de trabajo actual de git
git rm -rf .
Es posible que ya va a ser una versión completamente nueva, nuestro archivo .gitignore
ya no sea válido, así que vamos a eliminarlo
rm .gitignore
Luego vamos a trabajar normalmente, commiteando y pusheando a nuestro remoto, en esta nueva rama v2
.
Finalmente, cuando llegue el momento de reemplazar nuestra master
(la versión vieja o v1) por la nueva versión v2
, deberemos hacer lo siguiente:
Cambiamos a la rama nueva
git checkout v2
Mergeamos con master
utilizando la estrategia ours
de Git
This resolves any number of heads, but the resulting tree of the merge is always that of the current branch head, effectively ignoring all changes from all other branches. It is meant to be used to supersede old development history of side branches
git merge --allow-unrelated-histories -s ours master
(
-s ours
is short for--strategy=ours
)
Cambiamos a la rama master
git checkout master
Mergeamos
git merge v2
Fuentes:
https://stackoverflow.com/a/2862938
https://gist.github.com/ummahusla/8ccfdae6fbbe50171d77
https://dev.to/mcaci/how-to-create-an-orphan-branch-in-git-35ac
https://gregrs-uk.github.io/2018-08-02/pushing-git-branch-without-history/
https://www.nickang.com/2017-09-30-replace-git-branch-code/