password - git tutorial
¿Es posible elegir un compromiso desde otro repositorio de git? (10)
Aquí están los pasos para agregar un control remoto, buscar ramas y seleccionar un compromiso
# Cloning our fork
$ git clone [email protected]: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
Estoy trabajando con un repositorio de git que necesita una confirmación de otro repositorio de git que no sabe nada de lo primero.
Por lo general, yo seleccionaría el HEAD@{x}
en el reflog, pero como este .git
no sabe nada de esta entrada de reflog (directorio físico diferente), ¿cómo puedo elegir esto o puedo?
Estoy usando git-svn
. Mi primera rama usa git-svn
del trunk
de un repositorio de Subversion, y la siguiente rama usa git-svn
en una rama de Subversion.
Aquí hay un ejemplo de la combinación de control remoto.
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.
git merge projectB/master
Deberá agregar el otro repositorio como un control remoto y luego recuperar sus cambios. Desde allí ves el compromiso y puedes elegirlo.
Como eso:
git remote add other https://example.link/repository.git
git fetch other
Ahora tienes 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/en/v2/Git-Basics-Working-with-Remotes
La respuesta, como se indica, es usar el formato de parche, pero como la pregunta era cómo elegir desde otra carpeta, aquí hay un código para hacer eso:
$ git --git-dir=../<some_other_repo>/.git /
format-patch -k -1 --stdout <commit SHA> | /
git am -3 -k
(explicación de @cong ma)
El comando
git format-patch
crea un parche a partir delsome_other_repo
desome_other_repo
especificado por su SHA (-1
para un solo commit solo). Este parche se canaliza agit am
, que aplica el parche localmente (-3
significa probar la combinación de tres vías si el parche no se aplica limpiamente). Espero que lo explique.
Mi situación fue que tengo un repo al que presiona el equipo, y un clon de eso sentado justo al lado. Este conjunto de líneas en un Makefile funciona correctamente para mí:
git reset --hard
git remote update --prune
git pull --rebase --all
git cherry-pick -n remotes/origin/$(BRANCH)
Al mantener actualizado el maestro del repo desnudo, podemos elegir el cambio propuesto publicado al repo desnudo. También tenemos una forma (más complicada) de seleccionar múltiples brechas para una revisión y prueba consolidadas.
Si "no sabe nada" significa "no se puede usar como un control remoto", entonces esto no ayuda, pero surgió esta pregunta SO, ya que estaba buscando en Google para generar este flujo de trabajo, así que pensé que volvería a contribuir.
Puedes hacerlo en una línea como sigue. Espero que estés en el repositorio de git que necesita el cambio seleccionado y que hayas comprobado para corregir la rama.
git fetch ssh://[email protected]:7999/repo_to_get_it_from.git branchToPickFrom && git cherry-pick 02a197e9533
git fetch [URL de la rama] [Sucursal a cherry-pick from] && git cherry-pick [commit ID]
Puedes hacerlo, pero requiere dos pasos. Así es cómo:
git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD
Reemplace <remote-git-url>
con la url o la ruta al repositorio desde el que desea elegir.
Reemplace <branch>
con el nombre de rama o etiqueta que desea seleccionar desde el repositorio remoto.
Puede reemplazar FETCH_HEAD
con un git SHA de la rama.
Actualizado: modificado basado en la retroalimentación de @pkalinow.
Sí. Recupera el repositorio y luego selecciona desde la rama remota.
Suponiendo que A
es el repositorio desde el que desea elegir, y B
es el que desea seleccionar, puede hacer esto agregando </path/to/repo/A/>/.git/objects
a </path/to/repo/B>/.git/objects/info/alternates
. Cree este alternates
archivos si no existe.
Esto hará que la repo B acceda a todos los objetos de git desde la repo A, y hará que Cherry-pick trabaje para ti.
Vea 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 el mismo código base, 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 incluir toda la rama en su repositorio ...)