Y si push --force
no funciona, puedes hacerlo push --delete
. Mira 2Dakota del Norte línea en esta instancia:
git reset --hard HEAD~3 # reset current branch to 3 commits ago
git push origin master --delete # do a very very bad bad thing
git push origin master # regular push
Pero cuidado…
En otras palabras:
- Nunca
force
empujar en un repositorio público. - No hagas esto ni nada que pueda romperle a alguien.
pull
. - Nunca
reset
orewrite
historia en un repositorio alguien ya podría haber tirado.
Por supuesto, hay excepciones excepcionalmente raras incluso a esta regla, pero en la mayoría de los casos no es necesario hacerlo y generará problemas a todos los demás.
Y siempre tenga cuidado con lo que envía a un repositorio público. Revirtiendo:
git revert -n HEAD~3..HEAD # prepare a new commit reverting last 3 commits
git commit -m "sorry - revert last 3 commits because I was not careful"
git push origin master # regular push
En efecto, ambos CABEZAS de origen (del revertir y del reinicio malvado) contendrá los mismos archivos.
editar para agregar información actualizada y más argumentos alrededor push --force
Considere presionar la fuerza con arrendamiento en lugar de empujar, pero aún prefiera revertir
Otro problema push --force
puede traer es cuando alguien empuja algo antes de que usted lo haga, pero después de que ya lo haya buscado. Si empujas fuerza tu rebasado versión ahora lo harás reemplazar el trabajo de otros.
git push --force-with-lease
introducido en el git 1.8.5 (gracias al comentario de @VonC sobre la pregunta) intenta abordar este problema específico. Básicamente, traerá un error y no presionará si el control remoto fue modificado desde su última búsqueda.
Esto es bueno si está realmente seguro de que push --force
es necesario, pero aún desea evitar más problemas. Iría tan lejos como para decir que debería ser el predeterminado push --force
comportamiento. Pero todavía está lejos de ser una excusa para forzar una push
. Gente que traído antes de su rebase todavía tendrá muchos problemas, que podrían evitarse fácilmente si tuviera revirtió en lugar de.
Y ya que estamos hablando de git --push
instancias…
¿Por qué alguien querría forzar el empuje?
@linquize trajo un buen ejemplo de fuerza de empuje en los comentarios: informacion delicada. Ha filtrado erróneamente datos que no deberían enviarse. Si eres lo suficientemente rápido, puedes «reparar»*
forzando un empujón en la parte superior.
*
los los datos todavía estarán en el control remoto a menos que también haga una recolección de basura o la limpie de alguna manera. También existe el potencial obvio de que se propague por otras personas que traído ya lo tienes, pero entiendes la idea.