tutorial password origin español comandos and git cherry-pick

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 del some_other_repo de some_other_repo especificado por su SHA ( -1 para un solo commit solo). Este parche se canaliza a git 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 ...)