Tengo un repo1y repo2en una máquina local. Son muy similares, pero esta última es algún tipo de otra rama ( repo1ya no se mantiene).
/path/to/repo1 $ git log HEAD~5..HEAD~4
<some_sha> Add: Introduce feature X
¿Cómo aplicar los cambios realizados por commit <some_sha>in repo1a repo2?
¿Necesito preparar algún parche o es posible hacerlo cherry-pickentre los repositorios?
¿Qué tal hacer lo mismo pero para un rango de confirmaciones?

Respuestas:
Como truco, puede intentar modificar la receta para comparar confirmaciones en dos repositorios diferentes en la página de GitTips , es decir:
donde
../repoes la ruta al otro repositorio.Con Git moderno, puede usar múltiples revisiones y rangos de revisión con selección de cerebros .
El
$(git --git-dir=../repo/.git rev-parse --verify <commit>)está aquí para traducir<commit>(por ejemploHEAD, ov0.2, omaster~2, que son valores en el segundo depósito de la copia se realiza) en SHA-1 identificador de comprometerse. Si conoce SHA-1 de un cambio que desea elegir, no es necesario.TENGA EN CUENTA, sin embargo, que Git puede omitir la copia de objetos del repositorio de origen, ya que no sabe que el repositorio de objetos alternativo es solo temporal, para una operación. Es posible que deba copiar objetos del segundo repositorio con:
Esto coloca esos objetos prestados del segundo repositorio en el almacenamiento del repositorio original
No probado.
Una solución no tan hacky es seguir la respuesta de knittl :
git format-patchgit am --3waypara aplicar parchesfuente
fatal: unable to read tree ...pero después de quegit reset HEAD^todo funciona bien<commit>pero alrev-parse --verifycomando no le gusta, ya que solo acepta valores de confirmación únicos. Pero comocherry-pickacepta valores de compromiso únicos y de rango, pregunto: ¿por qué serev-parsenecesita?git rev-parsees necesario si se desea hacer referencia a un compromiso por su nombre a base de referencia en otro depósito, por ejemplomaster,HEAD^^o algo por el estilo; rev-parse lo convierte en un identificador universal SHA-1.Probablemente desee utilizar
git format-patchy luegogit amaplicar ese parche a su repositorio.O, en una línea:
fuente
GIT_ALTERNATE_OBJECT_DIRECTORIES(que corrompería mi repositorio).--ignore-whitespacealgit amcomando puede resolver cualquier conflicto y evitar la necesidad de realizar una combinación de 3 víasPuede hacerlo
cherry-picksi agrega el segundo repositorio como remoto al primero (y luegofetch).fuente
git fetch [remote-name]en el segundo repositorio y luegogit cherry-pick [sha1].cherry-pick. Entonces, aunque pueda parecer la forma "correcta", no siempre es la más práctica.Escribí un pequeño script para aplicar la salida diff de repo diff https://github.com/raghakh/android-dev-scripts/commit/a57dcba727d271bf2116f981392b0dcbb22734d0
fuente