Estaba trabajando accidentalmente en una rama que no debería haber estado durante un tiempo, así que me separé dándole el nombre apropiado. Ahora quiero sobrescribir la rama en la que no debería haber estado en la versión desde el origen (github). ¿Hay una forma fácil de hacer esto? Intenté eliminar la rama y luego restablecer la rama de seguimiento, pero solo me da la versión en la que estaba trabajando nuevamente.
440
git switch -C mybranch origin/mybranch
. Vea mi respuesta editada a continuaciónRespuestas:
Si aún no ha llegado al origen, puede restablecer su rama a la rama ascendente con:
(Asegúrese de hacer referencia a su último commit en una rama separada, como menciona en su pregunta)
Tenga en cuenta que justo después del reinicio, se
mybranch@{1}
refiere a la confirmación anterior, antes del reinicio.Pero si ya había presionado, consulte " Crear rama git y revertir el original al estado ascendente " para ver otras opciones.
Con Git 2.23 (agosto de 2019) , que sería un comando:
git switch
.A saber:
git switch -C mybranch origin/mybranch
Ejemplo
Eso restaura el índice y el árbol de trabajo, como lo
git reset --hard
haría.Como se ha comentado por Brad Herman , una
reset --hard
sería eliminar cualquier archivo nuevo o modificado archivos vuelva a CABEZA .En realidad, para asegurarse de comenzar desde una "pizarra limpia", un
git clean -f -d
después del reinicio garantizaría un árbol de trabajo exactamente idéntico a la rama a la que acaba de reiniciar.Esta publicación de blog sugiere esos alias (
master
solo para rama, pero puede adaptarlos / extenderlos):fuente
git reset --hard origin/mybranch
comando varias veces cuando no me importaban los cambios locales y solo quería una copia limpia que coincidiera con el origen. Sin embargo, hoy, esto no funcionó: todavía tenía un puñado de archivos nuevos sin clasificar, y git seguía prometiéndome que estaba en HEAD. La nota sobre logit clean -f -d
solucionó borrando todos los archivos nuevos que no quería.git reset --hard HEAD
volver a una confirmación anterior, ignorando cualquier cambioAsumiendo que esto es lo que sucedió:
Entonces te das cuenta de que haces cambios en la rama equivocada.
Pero
master
aún apunta a su compromiso. Desea que apunte hacia donde apuntó antes.Solución
La forma más fácil es:
Otra forma es:
Tenga en cuenta que el uso
reset --hard
hará que se pierdan los cambios no confirmados (tests.py
en mi ejemplo).fuente
Tengo un repositorio privado en un servidor y regularmente lo reescribo / forzo, lo que hace que sea necesario restablecer la rama local en mi otra computadora con frecuencia. Por lo tanto, creé el siguiente alias "catchup", que permite hacer esto para la rama actual. A diferencia de la otra respuesta, no hay un nombre de rama codificado en este alias.
Agárrate fuerte.
Formateado correctamente (no funcionará con las nuevas líneas en .gitconfig) se ve así:
\\033[0;33m
y\\033[0m
es para enfatizar la rama actual y corriente arriba con color.$(git symbolic-ref -q --short HEAD)
es el nombre actual de la sucursal$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))
es el flujo ascendente de la rama actual.Dado que restablecer es una llamada potencialmente peligrosa (especialmente con la opción --hard, perderá los cambios no confirmados), primero le indica lo que está por hacer. Por ejemplo, si está en una rama dev-container con control remoto llamado qcpp / dev-container e ingresa
git catchup
, se le pedirá:Si luego escribe y o simplemente presiona regresar, realizará el reinicio. Si ingresa algo más, el reinicio no se llevará a cabo.
Si desea ser súper seguro y prevenir mediante programación la pérdida de cambios no organizados / no confirmados, puede aumentar aún más el alias anterior con las comprobaciones correspondientes para el índice de diferencias .
La palabra de advertencia obligatoria: si está trabajando en un repositorio público en el que otras personas han basado su trabajo y necesita este alias, lo está haciendo mal ™ .
fuente
Intenté esto y no restableció mi rama actual a mi github remoto más reciente. Busqué en Google y encontré https://itsyndicate.org/blog/how-to-use-git-force-pull-properly/
que sugirió
Quería restablecer mi rama v8, así que lo hice
Y funcionó
fuente