Limpiar una bifurcación y reiniciarla desde aguas arriba.

Bifurqué un repositorio, luego hice algunos cambios y parece que lo arruiné todo.

Deseo comenzar de nuevo desde cero, usando el upstream/master actual como base para mi trabajo.
¿Debo reorganizar mi repositorio o eliminarlo por completo?

preguntado el 10 de marzo de 12 a las 11:03

Respuestas muy complejas a una pregunta simple. Simplemente elimine todo y vuelva a clonar el repositorio. -

@Yaza, no, esto podría causarle aún más problemas en algunos escenarios. -

@shimmy, no si quieres comenzar de nuevo desde cero como pidió OP. -

4 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 ésto 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 el master biblioteca (tanto a nivel local, debido a la reset --hard, y en el lado remoto, debido a la push --force).

Una alternativa sería, si desea conservar sus confirmaciones en master, para reproducir esas confirmaciones además de la actual upstream/master.
Reemplace la parte de reinicio por una git rebase upstream/master. Entonces todavía tendrá que forzar el empuje.
Ver también "¿Qué debo hacer si estoy en una mala situación?"


En "Limpie la rama maestra de git y mueva algunos compromisos a la nueva rama".

Ver también "Extraiga nuevas actualizaciones del repositorio de GitHub original al repositorio de GitHub bifurcado"por ilustrar lo que"upstream" es.

río arriba


Nota: los repositorios recientes de GitHub hacen proteger el master biblioteca en contra push --force.
Así que tendrás que desproteger master primero (ver imagen abajo), y luego volver a protegerlo después de empujar con fuerza).

enter image description here


Nota: en GitHub específicamente, hay ahora (febrero de 2019) un atajo para eliminar repositorios bifurcados para solicitudes de extracción que se han fusionado en sentido ascendente.

Respondido 15 Feb 19, 08:02

hola, funciono muy bien! por cierto, la sintaxis de reinicio correcta es git reset --hard upstream/master - apisonar125

@ tampe125 Excelente. He arreglado la sintaxis de git reset en la respuesta. - VonC

tengo fatal: ambiguous argument 'upstream/master': unknown revision or path not in the working tree on git reset --hard upstream/master - Bogdan

@ShimmyWeitzhandler Sí, a través del script: stackoverflow.com/a/58372324/6309 - VonC

Para aquellos que tienen problemas en el flujo ascendente, primero asegúrese de que el flujo ascendente esté configurado para escribir bits. git remote -v - eglefino-san

Me encanta la respuesta de VonC. Aquí hay una versión fácil para principiantes.

Hay un control remoto de git llamado origin que estoy seguro de que todos ustedes 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 la bifurcación. me gusta llamarlo original

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 código más reciente.

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 código más reciente en el repositorio original, todo lo que tenemos que hacer es reiniciar nuestra rama maestra de acuerdo con el control remoto original.

git reset --hard original/master

Y ya terminaste :)

Respondido el 22 de Septiembre de 16 a las 01:09

Me estoy poniendo fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree. en el paso final. ¿Algún consejo? - TomNoruega

Parece que esto solo le deja existencias en la sucursal remota original. Supongo que a esto le falta un paso para restablecer SU tenedor al control remoto correcto. - Ray Suelzer

original es mejor que upstream (que usan los documentos de Github), como origin/master es "aguas arriba" de local master. Reduce la ambigüedad. Me pregunto si es por eso que lo usas. - Vaughan

¡Es exactamente por eso que lo uso! - Ahmad Awais

Seguí estas instrucciones y ahora git status dice: On branch master Tu rama y 'origen/master' han divergido, y tienen 52 y 5 confirmaciones diferentes cada una, respectivamente. (use "git pull" para fusionar la rama remota con la suya), pero quiero descartar mis 5 confirmaciones. ¿Cuál es el siguiente paso? - Steve

Siguiendo la gran respuesta de @VonC. Es posible que la política de su empresa de GitHub no permita 'forzar inserción' en el 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 efectivamente su horquilla, 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 establecer '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

Otras respuestas que advierten sobre la pérdida de su cambio aún se aplican, tenga cuidado.

Respondido 24 Oct 18, 08:10

Cómo hacerlo 100% a través de la GUI del árbol fuente

(No a todo el mundo le gusta hacer cosas a través de la interfaz de línea de comandos de git)

Una vez que se haya configurado, solo necesita realizar los pasos 7-13 a partir de ese momento.

Obtener> rama maestra de pago> restablecer a su maestro> Enviar cambios al servidor

Proceso

  1. En la barra de herramientas del menú en la parte superior de la pantalla: "Repositorio" > "Configuración del repositorio"

"Repositorio" resaltado en la barra de menú superior

  1. "Añadir"

Botón "Agregar" en la parte inferior del cuadro de diálogo

  1. Vuelva a GitHub y copie la URL de clonación.

Botón "Clonar o descargar" en el sitio web de Github seguido de la URL de git

  1. Pegue la URL en el campo "URL / Ruta" y luego asígnele un nombre que tenga sentido. Lo llamé "maestro". No marque la casilla de verificación "Remoto predeterminado". No podrá enviar directamente a este repositorio.

Los campos "Nombre remoto" y "URL/Ruta" resaltados en el cuadro de diálogo "Detalles remotos"

  1. Presiona "OK" y deberías verlo aparecer en tu lista de repositorios ahora.

Repositorio "maestro" agregado a la lista de repositorios en el cuadro de diálogo "Configuración del repositorio"

  1. Presione "OK" nuevamente y debería verlo aparecer en su lista de "Controles remotos".

repositorio "maestro" resaltado en la lista de controles remotos en la barra lateral

  1. Haga clic en el botón "Obtener" (arriba a la izquierda del área del encabezado del árbol Fuente)

Botón "Buscar" en el área del encabezado

  1. Asegúrese de que la casilla de verificación "Obtener desde todos los controles remotos" esté marcada y presione "ok"

Casilla de verificación "Obtener desde todos los controles remotos" resaltada en el cuadro de diálogo "Obtener"

  1. Haga doble clic en su rama "maestra" para comprobarlo si aún no lo está.

  2. Encuentre el compromiso al que desea restablecer, si llamó al repositorio "maestro", lo más probable es que desee encontrar el compromiso con la etiqueta "maestro/maestro".

Ejemplo de una confirmación con una etiqueta "maestro/maestro"

  1. Haga clic derecho en la confirmación> "Restablecer rama actual a esta confirmación".

  2. En el cuadro de diálogo, configure el campo "Modo de uso:" en "Hard - descartar todos los cambios de la copia de trabajo" y luego presione "Aceptar" (asegúrese de poner cualquier cambio que no quiera perder en una rama separada primero).

El campo "Modo de uso" resaltado en el cuadro de diálogo "Restablecer para confirmar". Está configurado para "descartar todos los cambios de la copia de trabajo"

  1. Haga clic en el botón "Pulsar" (arriba a la izquierda del área del encabezado del árbol de fuentes) para cargar los cambios en su copia del repositorio.

Botón "Pulsar" en el área del encabezado

¡Terminaste!

Respondido 13 ago 18, 09:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.