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


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

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

Estoy usando git-svn. Mi primera sucursal está usando git-svn del trunk de un repositorio de Subversion, y la siguiente rama está usando git-svn en una sucursal de Subversion.


526
2018-02-25 16:47


origen


Respuestas:


Tendrá que agregar el otro repositorio como un control remoto, luego buscar sus cambios. A partir de ahí, verá el compromiso y podrá elegirlo.

Como eso:

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

Ahora tiene toda la información para simplemente hacer git cherry-pick.

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


355
2018-02-25 16:50



La respuesta, como se ha dado, es usar parche de formato, pero dado que la pregunta era cómo seleccionar cuidadosamente desde otra carpeta, aquí hay un fragmento de código para hacer justamente eso:

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

(explicación de @cong ma)

los git format-patch comando crea un parche de some_other_repoes   compromiso especificado por su SHA (-1 para un solo compromiso solo). Esta   el parche se canaliza a git am, que aplica el parche localmente (-3 medio   probando la combinación de tres vías si el parche no se puede aplicar limpiamente). Esperanza   eso explica.


725
2018-02-29 22:06



Aquí hay un ejemplo de la fusión de búsqueda remota.

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

Entonces tienes una opción:

git merge projectB/master

o:

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

119
2017-07-13 20:20



Puedes hacerlo, pero requiere dos pasos. Así es cómo:

git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD

Reemplazar <remote-git-url> con la url o el camino al repositorio del que desea elegir.

Reemplazar <branch> con la rama o el nombre de la etiqueta que desea seleccionar desde el repositorio remoto.

Puedes reemplazar FETCH_HEAD con un git SHA de la rama.

Actualizado: modificado en función de los comentarios de @pkalinow.


97
2018-03-14 22:40



Estos son los pasos para agregar un control remoto, buscar ramas y seleccionar una confirmación

# Cloning our fork
$ git clone git@github.com:ifad/rest-client.git

# Adding (as "endel") the repo from we want to cherry-pick
$ git remote add endel git://github.com/endel/rest-client.git

# Fetch their branches
$ git fetch endel

# List their commits
$ git log endel/master

# Cherry-pick the commit we need
$ git cherry-pick 97fedac

Fuente: https://coderwall.com/p/sgpksw


52
2017-09-16 20:16



Ver Cómo crear y aplicar un parche con Git. (De la redacción de su pregunta, asumí que este otro repositorio es para una base de código completamente diferente. Si es un repositorio para la misma base de código, debe agregarlo como un control remoto como lo sugiere @CharlesB. Incluso si es para otro base de código, supongo que aún podría agregarlo como un control remoto, pero es posible que no desee obtener la rama completa en su repositorio ...)


15
2018-02-25 16:51



Puedes hacerlo en una línea como sigue. Espero que estés en el repositorio de git, que necesita el cambio escogido y que has revisado para corregir la rama.

git fetch ssh://git@stash.mycompany.com:7999/repo_to_get_it_from.git branchToPickFrom && git cherry-pick 02a197e9533

git fetch [URL de sucursal]  [Sucursal para seleccionar con precisión de] && git cherry-pick [confirmar ID]


6
2017-09-17 09:47