Quiero hacer un git pull
pero solo hasta un compromiso específico.
A->B->C->D->E->F (Remote master HEAD)
así que suponga que mi local master
CABEZA apunta hacia B
, y quiero tirar de la caja E
. Qué tengo que hacer ?
Esto no implica una confirmación específica, sino una confirmación específica.
git fetch
ygit merge E
.Respuestas:
git pull
no es más quegit fetch
seguido degit merge
. Entonces, lo que puedes hacer esgit fetch remote example_branch
git merge <commit_hash>
fuente
git merge E
se fusionaráE
con todos sus antepasadosC
yD
(git lo sabeA
yB
no es necesario fusionarlos porque ya estaban en su rama). Si SOLO desea los cambios deE
entonces deberíagit cherry-pick E
hacerlo.Primero, obtenga las últimas confirmaciones del repositorio remoto. Esto no afectará a su sucursal local.
Luego, consulte la rama de seguimiento remoto y haga un registro de git para ver las confirmaciones
Toma el hash de confirmación de la confirmación que deseas fusionar (o solo los primeros ~ 5 caracteres) y fusiona esa confirmación en maestro
fuente
git fetch
antes de escribir tales tonterías. Además de eso, debería leer la pregunta original y mi respuesta. Si sigue mi respuesta, no estará "de vuelta en la historia" como le indiqué explícitamente al usuariogit checkout master
. En general, no publiques cosas si no tienes claro al menos un 50% lo que haces.git fetch origin
busca explícitamente el origen .También puede extraer la última confirmación y deshacerla hasta la confirmación que desee:
Reemplace
master
con la rama deseada.Use git log para ver a qué confirmación le gustaría revertir:
Personalmente, esto me ha funcionado mejor.
Básicamente, lo que hace es extraer la última confirmación y revertir manualmente las confirmaciones una por una. Utilice git log para ver el historial de confirmaciones.
Puntos positivos : funciona como se anuncia. No es necesario utilizar el hash de confirmación o extraer ramas innecesarias.
Puntos negativos: debe revertir las confirmaciones en una.
ADVERTENCIA: Confirme / guarde todos sus cambios locales, porque con
--hard
usted los perderá. ¡Úselo bajo su propio riesgo!fuente
HEAD
antes de regresar, y no sé qué pasaría si tuvieras que resolver conflictos. Pero esta solución lo permitegit pull --rebase
, y al contrario de lo que se dice, puede restablecer directamente a lasN
confirmaciones anteriores congit reset --hard HEAD~N
(es decir, para 3 confirmacionesgit reset --hard HEAD~3
).Si fusiona una confirmación en su rama, debería obtener todo el historial entre.
Observar:
fuente
Esto funciona para mi:
p.ej
Esto extrae 28eb00, ff39e4 y todo lo anterior, pero no extrae f4d10ad. Permite el uso de pull --rebase y respeta la configuración de extracción en su gitconfig. Esto funciona porque básicamente está tratando 28eb00 como una rama.
Para la versión de git que estoy usando, este método requiere un hash de confirmación completo; no se permiten abreviaturas ni alias. Podrías hacer algo como:
fuente