Debería poder forzar su revisión local al repositorio remoto utilizando
git push -f <remote> <branch>
(por ejemplo git push -f origin master
) Dejando <remote>
y <branch>
forzará empujar todas las ramas locales que se han establecido --set-upstream
.
Solo tenga en cuenta que si otras personas comparten este repositorio, su historial de revisiones entrará en conflicto con el nuevo. Y si tienen compromisos locales después del punto de cambio, serán invalidados.
Actualización : pensé que agregaría una nota al margen. Si está creando cambios que otros revisarán, entonces no es raro crear una rama con esos cambios y volver a redactar periódicamente para mantenerlos actualizados con la rama de desarrollo principal. Simplemente informe a otros desarrolladores que esto sucederá periódicamente para que sepan qué esperar.
Actualización 2 : debido al creciente número de espectadores, me gustaría agregar información adicional sobre qué hacer cuando upstream
experimentas un impulso forzado.
Digamos que he clonado su repositorio y he agregado algunas confirmaciones como esta:
D ---- E tema
/ /
A ---- B ---- C desarrollo
Pero más tarde, la development
rama se golpea con un rebase
, lo que hará que reciba un error así cuando ejecuto git pull
:
Desembalaje de objetos: 100% (3/3), hecho.
De <repo-location>
* desarrollo de sucursal -> FETCH_HEAD
Auto-fusión <archivos>
CONFLICTO (contenido): fusionar conflicto en <ubicaciones>
La fusión automática falló; arregle conflictos y luego confirme el resultado.
Aquí podría solucionar los conflictos y commit
, pero eso me dejaría con un historial de cometer realmente feo:
C ---- D ---- E ---- F tema
/ /
A ---- B -------------- C 'desarrollo
Puede parecer atractivo de usar, git pull --force
pero ten cuidado porque eso te dejará con compromisos varados:
D ---- E tema
A ---- B ---- C 'desarrollo
Entonces, probablemente la mejor opción es hacer un git pull --rebase
. Esto requerirá que resuelva cualquier conflicto como antes, pero para cada paso en lugar de comprometerlo lo usaré git rebase --continue
. Al final, el historial de confirmación se verá mucho mejor:
D '--- E' tema
/ /
A ---- B ---- C 'desarrollo
Actualización 3: También puede usar la --force-with-lease
opción como un impulso de fuerza "más seguro", como lo menciona Cupcake en su respuesta :
El empuje forzado con un "arrendamiento" permite que el empuje forzado falle si hay nuevas confirmaciones en el control remoto que no esperaba (técnicamente, si aún no las ha traído a su rama de seguimiento remoto), lo cual es útil si no desea sobrescribir accidentalmente los compromisos de otra persona que aún no conocía, y solo desea sobrescribir los suyos:
git push <remote> <branch> --force-with-lease
Puede obtener más detalles sobre cómo usar --force-with-lease
leyendo cualquiera de los siguientes:
git push origin --force
te funcionó?