Cuando esté un poco actualizado con Git (y DVCS en general), y comience a explorar los cambios de reescritura del historial, estará seguro si el repositorio es solo local, pero podría tener problemas si trabaja con controles remotos e intenta empujar tales cambios.
Una característica que esperaría es la capacidad de habilitar un "modo seguro" que básicamente me impediría hacer lo que no debería hacer ... ¿Y qué quiero decir con eso? Me refiero a cambios en la reescritura de la historia para cosas que ya se han llevado a un origen. No puedo definirlo con precisión, pero esto incluiría casos como:
commit --amend
cuando HEAD ya ha sido empujadorebase
de una sucursal no localreset
de una rama que ha sido empujada
Estos son ejemplos de situaciones que probablemente harán que el próximo push
fracaso (porque no sería un avance rápido, IIRC). Hice algo de eso por accidente y tuve que volver a crear la rama en el control remoto. Y todavía tuve la suerte de hacer esto lo suficientemente rápido como para que nadie sacara la historia que he reescrito.
Creo que es posible identificar este tipo de cambios y, a pedido, evitar que el usuario los haga. ¿Hay tal vez una opción para eso?
Si no lo hay, ¿crees que vale la pena intentar crearlo? ¿Tratarías de definir con precisión cómo identificar tal "cambio peligroso"?
--force
.Respuestas:
Esto se ve muy cerca, si no es la misma pregunta que Estrategia para prevenir o atrapar la reescritura del historial de Git
Para resumir, puede habilitar
git config --system receive.denyNonFastforwards true
y
git config --system receive.denyDeletes true
O escriba un mensaje de recepción para rechazar cualquier cosa que determine que es una reescritura.
fuente
denyNonFastforwards
es el valor predeterminado (?), MientrasdenyDeletes
que no lo es. Estos dos son útiles, pero estoy imaginando una solución del lado del cliente que me impediría, por ejemplo, hacer una accióncommit --amend
si no pudiera presionarla (porque HEAD ya fue presionada).denyNonFastfowards
quetrue
sólo en la rama principal? Me gustaría que mis ramas temáticas puedan ser rebajadas y forzadas.No, porque es parte de la filosofía de git darle todo el poder y permitirle administrar ese poder de la manera que desee.
Si no se adhiere a esta filosofía, quizás valga la pena cambiar a Mercurial, ya que permiten reescribir el historial, pero de una manera limitada o, para ser clara, reacia, eso le hace sentir que no es una buena idea.
fuente
AFAIK, la forma en que git resuelve estos problemas es que siempre que solicite dicha acción, la realizará localmente, pero le informará que lo que está haciendo puede tener consecuencias indeseables. En ese momento, aún no ha empujado nada, por lo que está en condiciones de revisar su repositorio local y posiblemente deshacer el cambio peligroso antes de presionar. Sin embargo, debes prestar atención a lo que te dice git, y es mejor que tengas cuidado cuando repares tales errores.
fuente