Bifurqué un repositorio, luego hice algunos cambios y parece que lo he estropeado todo.
Deseo comenzar de nuevo desde cero, utilizando el actual upstream / master como base para mi trabajo.
¿Debo volver a basar mi repositorio o eliminarlo?
Bifurqué un repositorio, luego hice algunos cambios y parece que lo he estropeado todo.
Deseo comenzar de nuevo desde cero, utilizando el actual upstream / master como base para mi trabajo.
¿Debo volver a basar mi repositorio o eliminarlo?
Respuestas:
La solución más simple sería (usando ' upstream
' como el nombre remoto que hace referencia al repositorio original bifurcado):
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
(Similar a esta página de GitHub, sección "¿Qué debo hacer si estoy en una mala situación?" )
Tenga en cuenta que puede perder los cambios realizados en la master
rama (tanto localmente, debido a reset --hard
, y en el lado remoto, debido a push --force
).
Una alternativa sería, si desea conservar sus confirmaciones master
, para reproducir esas confirmaciones por encima de la actual upstream/master
.
Reemplace la parte de reinicio por a git rebase upstream/master
. Entonces aún necesitará forzar el empuje.
Consulte también " ¿Qué debo hacer si estoy en una mala situación? "
Una solución más completa, respaldar su trabajo actual (por si acaso) se detalla en " Limpiar la rama maestra de git y mover algunos compromisos a la nueva rama ".
Consulte también " Obtenga nuevas actualizaciones del repositorio original de GitHub en el repositorio bifurcado de GitHub " para ilustrar qué es " upstream
".
Nota: los repositorios recientes de GitHub protegen la master
rama contra push --force
.
Por lo tanto, master
primero tendrá que desprotegerlo (vea la imagen a continuación) y luego volver a protegerlo después de presionarlo a la fuerza ).
Nota: en GitHub específicamente, ahora hay (febrero de 2019) un acceso directo para eliminar repositorios bifurcados para solicitudes de extracción que se han fusionado en sentido ascendente.
git reset --hard upstream/master
git reset
en la respuesta.
git remote
comandos " " en stackoverflow.com/a/3903835/6309 .
Me encanta la respuesta de VonC. Aquí hay una versión fácil para principiantes.
Hay un control remoto llamado git origin
que estoy seguro de que todos conocen. Básicamente, puede agregar tantos controles remotos a un repositorio de git como desee. Entonces, lo que podemos hacer es introducir un nuevo control remoto que es el repositorio original, no el tenedor. Me gusta llamarlooriginal
Agreguemos repositorios originales a nuestra bifurcación como control remoto.
git remote add original https://git-repo/original/original.git
Ahora busquemos el repositorio original para asegurarnos de que tenemos el último código
git fetch original
Como, sugirió VonC, asegúrese de que estamos en el maestro.
git checkout master
Ahora para actualizar nuestra bifurcación con el último código en el repositorio original, todo lo que tenemos que hacer es restablecer nuestra rama maestra de acuerdo con el control remoto original.
git reset --hard original/master
Y ya terminaste :)
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.
al último paso. ¿Algún consejo?
original
es mejor que upstream
(que usan los documentos de Github), ya que origin/master
es "corriente arriba" de local master
. Reduce la ambigüedad. Me pregunto si es por eso que lo usas.
Siguiendo @VonC gran respuesta. Es posible que la política de su compañía GitHub no permita 'forzar' al maestro.
remote: error: GH003: Sorry, force-pushing to master is not allowed.
Si recibe un mensaje de error como este, intente los siguientes pasos.
Para restablecer su bifurcación de manera efectiva, debe seguir estos pasos:
git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin
Abra su bifurcación en GitHub, en "Configuración -> Ramas -> Rama predeterminada" elija 'new_master' como la nueva rama predeterminada. Ahora puede forzar el empuje en la rama 'maestra':
git checkout master
git push --force origin
Luego debe volver a configurar 'maestro' como la rama predeterminada en la configuración de GitHub. Para eliminar 'tmp_master':
git push origin --delete tmp_master
git branch -D tmp_master
Todavía se aplican otras respuestas que advierten sobre la pérdida de su cambio, tenga cuidado.
(No a todos les gusta hacer cosas a través de la interfaz de línea de comandos de git)
Una vez que esto se ha configurado, solo necesita realizar los pasos 7 a 13 a partir de ese momento.
Fetch> checkout master branch> restablecer a su master> Enviar cambios al servidor
Haga doble clic en su rama "maestra" para ver si aún no está desprotegida.
Encuentre la confirmación a la que desea restablecer, si llamó al repositorio "maestro", lo más probable es que desee encontrar la confirmación con la etiqueta "maestro / maestro".
Haga clic derecho en la confirmación> "Restablecer la rama actual a esta confirmación".
En el cuadro de diálogo, configure el campo "Modo de uso:" en "Descartar por completo todos los cambios de la copia de trabajo" y luego presione "Aceptar" (asegúrese de colocar primero cualquier cambio que no desee perder en una rama separada).
¡Terminaste!