Bifurqué un repositorio en Github. Hice algunos cambios menores y envié solicitudes de extracción en sentido ascendente, pero en el camino mi bifurcación se ha vuelto tan destrozada que no puedo generar solicitudes de extracción limpias; cuando inicio una solicitud de extracción desde una rama con seis cambios, Github quiere enviar trece, y siete de ellos ya existen en sentido ascendente (natch).
Mi problema parece estar relacionado con solo extraer las últimas confirmaciones , pero cuando creo una nueva rama y selecciono confirmaciones, todavía tengo extras. También he tenido problemas con el rebase , pero ahora parece que incluso mi maestro está tan arruinado que no puedo generar una copia limpia de upstream . Aparentemente, esto se debe a que no entendí que necesitaba reajustar en lugar de fusionar , así que claramente cometí errores; lo que estoy tratando de hacer es descubrir cómo desenredar ese nudo y volver a un estado limpio en el que pueda avanzar de manera útil.
Como que quiero volar mi bifurcación y hacer una nueva bifurcación de la corriente arriba, pero creo que eso también es difícil.
Habiendo confesado mis pecados de Git, ¿cómo obtengo la absolución de github?
Respuestas:
Paso 1: Extraiga los cambios ascendentes
Se recomienda agregar el repositorio ascendente como "ascendente" como se explica en la página Fork a Repo :
La
--rebase
opción coloca sus cambios encima de la última confirmación sin fusiones.Paso 2: (Opcional) Fusiona tus confirmaciones en 1 confirmación
Este comando "deshará" todas sus confirmaciones, pero no cambiará los archivos. Entonces puede confirmar todos sus cambios en una sola confirmación.
Paso 3: Verifique y pruebe sus cambios
Para mostrar los cambios, use una GUI como la integrada
gitk
, Sourcetree , TortoiseGit o Tower (de pago) , etc.Paso 4: Empuje
git push
arrojará un error, porque la inserción cambiaría el historial del repositorio de destino.Si está seguro de que los cambios que se muestran en el paso 3 son correctos, presione con "-f"
Información adicional
El comando para agregar un control remoto es:
También puede extraer de una URL directa:
Pero luego necesitará el hash de la última confirmación upstream en lugar de "upstream / master" en los otros pasos.
fuente
Según tengo entendido, tanto con Git como con Mercurial (solo he usado este último, por lo que puedo estar equivocado) no es gran cosa hacer volar un tenedor y volver a hornearlo. Hago eso todo el tiempo con mis proyectos. Si está de acuerdo con hacer eso (puede hacer una copia de seguridad de sus cambios o no tiene ningún cambio significativo en su bifurcación), diría que probablemente sea el camino a seguir.
Recuerde, con DVCS, bifurcar un repositorio hace un clon completo de todo ese repositorio . Si elimina su bifurcación actual y luego bifurca el repositorio original nuevamente, tendrá una pizarra completamente limpia para trabajar.
fuente
git format-patch
para preservar las confirmaciones que quiero guardar primero.git format-patch
para guardar su trabajo es una especie de eludir todas las herramientas útiles que tiene git para administrar ramas. En el futuro, usargit rebase -i
para reescribir selectivamente sus confirmaciones en la parte superior de la nuevamaster
rama ascendente es lo correcto.En su repositorio privado, agregue el repositorio de forkee como un control remoto. Rebase / restablezca sus ramas desde las ramas del control remoto. Haga un empuje forzado a su repositorio de github.
Si necesita comandos exactos, hágamelo saber. También avíseme si quiere intentar preservar las confirmaciones locales o si "volar lejos" está bien.
fuente