¿Es posible seleccionar una confirmación de otro repositorio de git?

Resuelto gitcoder182 asked hace 13 años • 14 respuestas

Estoy trabajando con un repositorio de git que necesita una confirmación de otro repositorio de git que no sabe nada del primero.

Por lo general, seleccionaría el uso de HEAD@{x}en el reflog, pero debido a que esto .gitno sabe nada de esta entrada de reflog (directorio físico diferente), ¿cómo puedo seleccionar esto, o puedo?

Estoy usando git-svn. Mi primera rama usa git-svnun trunkrepositorio de Subversion y la siguiente rama usa git-svnuna rama de Subversion.

gitcoder182 avatar Feb 25 '11 23:02 gitcoder182
Aceptado

La respuesta, tal como se dio, es usar format-patch, pero como la pregunta era cómo seleccionar de otra carpeta, aquí hay un fragmento de código para hacer precisamente eso:

$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k

Explicación del comentario de Cong Ma del 28 de agosto de 2014.

El comando git format-patch crea un parche a partir de la confirmación de some_other_repo especificada por su SHA (-1 para una sola confirmación). Este parche se canaliza a git am, que aplica el parche localmente (-3 significa intentar la combinación de tres vías si el parche no se aplica limpiamente).

Robert Wahler avatar Feb 29 '2012 22:02 Robert Wahler

Deberá agregar el otro repositorio como remoto y luego recuperar sus cambios. Desde allí verás el compromiso y podrás seleccionarlo.

Como eso:

git remote add other https://example.link/repository.git
git fetch other

Ahora tienes toda la información para hacerlo de forma sencilla git cherry-pick.

Cuando termine, es posible que desee quitar el control remoto nuevamente, si ya no lo necesita, con

git remote remove other

Más información sobre cómo trabajar con controles remotos aquí: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes

CharlesB avatar Feb 25 '2011 16:02 CharlesB

A continuación se muestra un ejemplo de combinación de búsqueda remota.

cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB

Entonces tú puedes:

git cherry-pick <first_commit>..<last_commit>

o incluso podrías fusionar toda la rama (solo si realmente necesitas fusionar todo)

git merge projectB/master
Brian avatar Jul 13 '2012 20:07 Brian