Quiero hacer un git pullpero solo hasta un compromiso específico.
A->B->C->D->E->F (Remote master HEAD)
así que suponga que mi local masterCABEZA 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 fetchygit merge E.Respuestas:
git pullno es más quegit fetchseguido degit merge. Entonces, lo que puedes hacer esgit fetch remote example_branchgit merge <commit_hash>fuente
git merge Ese fusionaráEcon todos sus antepasadosCyD(git lo sabeAyBno es necesario fusionarlos porque ya estaban en su rama). Si SOLO desea los cambios deEentonces deberíagit cherry-pick Ehacerlo.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 fetchantes 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 originbusca explícitamente el origen .También puede extraer la última confirmación y deshacerla hasta la confirmación que desee:
Reemplace
mastercon 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
--hardusted los perderá. ¡Úselo bajo su propio riesgo!fuente
HEADantes 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 lasNconfirmaciones 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:
$ git init ./ Repositorio Git vacío inicializado en /Users/dfarrell/git/demo/.git/ $ echo 'a'> letra $ git añadir letra $ git commit -m 'Letra inicial' [master (root-commit) 6e59e76] Letra inicial 1 archivo modificado, 1 inserción (+) modo de creación 100644 letra $ echo 'b' >> letra $ git agregar letra && git commit -m 'Agregar letra' [master 7126e6d] Añadiendo letra 1 archivo modificado, 1 inserción (+) $ echo 'c' >> letra; git add letter && git commit -m 'Añadiendo letra' [master f2458be] Añadiendo letra 1 archivo modificado, 1 inserción (+) $ echo 'd' >> letra; git add letter && git commit -m 'Añadiendo letra' [master 7f77979] Añadiendo carta 1 archivo modificado, 1 inserción (+) $ echo 'e' >> letra; git add letter && git commit -m 'Añadiendo letra' [master 790eade] Añadiendo letra 1 archivo modificado, 1 inserción (+) $ git log cometer 790eade367b0d8ab8146596cd717c25fd895302a Autor: Dan Farrell Fecha: Thu Jul 16 14:21:26 2015-0500 Añadiendo letra cometer 7f77979efd17f277b4be695c559c1383d2fc2f27 Autor: Dan Farrell Fecha: Thu Jul 16 14:21:24 2015-0500 Añadiendo letra cometer f2458bea7780bf09fe643095dbae95cf97357ccc Autor: Dan Farrell Fecha: Thu Jul 16 14:21:19 2015-0500 Añadiendo letra cometer 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad Autor: Dan Farrell Fecha: Thu Jul 16 14:20:52 2015-0500 Añadiendo letra cometer 6e59e7650314112fb80097d7d3803c964b3656f0 Autor: Dan Farrell Fecha: Thu Jul 16 14:20:33 2015-0500 Letra inicial $ git checkout 6e59e7650314112fb80097d7d3803c964b3656f $ git checkout 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad Nota: consulte '7126e6dcb9c28ac60cb86ae40fb358350d0c5fad'. Estás en estado de 'CABEZA separada'. Puedes mirar a tu alrededor, hacer experimental cambios y confirmarlos, y puede descartar cualquier compromiso que realice en este Estado sin afectar a ninguna sucursal realizando otro pago Si desea crear una nueva rama para retener las confirmaciones que crea, puede hágalo (ahora o más tarde) usando -b con el comando checkout nuevamente. Ejemplo: git checkout -b new_branch_name HEAD ahora está en 7126e6d ... Añadiendo letra $ git checkout -b B 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad Cambiado a una nueva rama 'B' $ git pull 790eade367b0d8ab8146596cd717c25fd895302a fatal: '790eade367b0d8ab8146596cd717c25fd895302a' no parece ser un repositorio de git fatal: no se pudo leer desde el repositorio remoto. Asegúrese de tener los derechos de acceso correctos. y el repositorio existe. $ git fusionar 7f77979efd17f277b4be695c559c1383d2fc2f27 Actualizando 7126e6d..7f77979 Avance rápido carta | 2 ++ 1 archivo modificado, 2 inserciones (+) $ carta de gato una segundo C refuente
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