Ricardo
Tengo el siguiente mensaje en git:
# Your branch and 'origin/master' have diverged,
# and have 3 and 8 different commits each, respectively.
# (use "git pull" to merge the remote branch into yours)
Me gustaría desechar las 3 confirmaciones locales y extraer las 8 confirmaciones remotas en origen/maestro.
(La fusión va a ser demasiado difícil, prefiero hacer las 3 confirmaciones locales nuevamente una vez que el maestro esté actualizado).
¿Cómo puedo hacer esto?
SLaks
git fetch origin
git reset --hard origin/master
Tenga en cuenta que se perderán las confirmaciones no insertadas o los cambios locales.
-
Puedes hacer
git reset origin/master
sin--hard
para que los cambios en el directorio de trabajo no se pierdan?– Wisbucky
22 de junio de 2016 a las 1:38
-
Veo un mensaje similar pero para la rama que no es maestra cuando lo cambio de base a la última maestra. ¿Qué haría un tirón en ese caso? ¿Debo tirar? Quiero que mi compromiso esté en los últimos cambios.
–Rajeev Ranjan
18 de febrero de 2020 a las 13:51
-
@RajeevRanjan: Pull (intentará) fusionarse en sus cambios existentes. Restablecer los desechará.
– SLaks
18 de febrero de 2020 a las 14:52
-
estos 2 comandos funcionaron de inmediato. Lo único adicional es que necesito restaurar los cambios que hice anteriormente a partir de la copia de seguridad que tomé. ¡Salud!
– Claro
22 oct 2021 a las 8:36
Para conservar tus confirmaciones anteriores en una rama temporal en caso de que las necesites:
git branch temp
Luego cambie al nuevo maestro
git fetch origin
git reset --hard origin/master
-
Entonces, ¿en este caso ramifica su rama? Si, por ejemplo, estaba trabajando en ‘mydevbranch’, ¿la rama temporal simplemente crea una nueva rama de copia de mydevbranch? Parece una medida de precaución por la forma en que lo dices en caso de que alguna vez se necesiten, están en esta copia.
– aterrizado
23 de abril de 2014 a las 6:43
-
Sí, es una medida de precaución. Simplemente garantiza que las confirmaciones no se pierdan en caso de que las necesite en el futuro.
– jdramer
9 jun 2014 a las 21:34
-
Intuitivamente, habría pensado que necesitarías confirmar tu código local antes de hacer esto, y ese es el problema porque no quieres que lo que acabas de hacer vaya contra la corriente. Supongo que entras localmente y no presionas, pero eventualmente tendría que subir… eso no es deseado, supongo. ¿Una rama es para una variación o característica diferente, pero debe ocurrir desde un estado comprometido? O tal vez eso es lo que estás diciendo. Tal vez no deba preocuparme por la confirmación: solo pensé que la rama toma una copia del origen de la fuente confirmada (perdiendo cambios locales)
– aterrizado
11 de mayo de 2015 a las 8:20
-
@landed: sí, confirmaría sus cambios locales después de hacer una sucursal
temp
. Más tarde, si desea recuperar algunas de esas confirmaciones, puede seleccionarlas (consultegit help cherry-pick
).– Cris Luengo
25/09/2017 a las 21:07
-
Gracias, después de reiniciar git, entonces
merge temp
resolvió mi problema– Weiliang
13 de abril de 2021 a las 12:16
Intenta hacer esto para acabar con tus confirmaciones locales:
git reset --hard HEAD~4
Como alternativa a la fusión, puede cambiar la base de la rama de características en la rama maestra usando los siguientes comandos:
git checkout feature
git rebase master
Bremsstrahlung
Para borrar su última confirmación local, use lo siguiente:
git reset HEAD^
Esto devolverá el encabezado al estado anterior a la confirmación y le permitirá git pull
del maestro Asegúrese de guardar todos sus cambios en otro lugar (localmente) antes de extraerlos del repositorio remoto.
Para poder tirar sin conflictos usa git stash
y luego git pull
.
Si un restablecimiento completo no es suficiente para usted y no desea hacer una combinación de extracción, puede descartar los cambios locales no deseados eliminando su sucursal local y volviendo a descargar la de origen:
git branch -D <local branch>
git checkout -b <branch name> origin/<branch name>
Usando main
como ejemplo:
git branch -D main
git checkout -b main origin/main