remove - git tags best practices
En parte escogiendo un compromiso con Git (5)
Estoy trabajando en 2 ramas diferentes: lanzamiento y desarrollo .
Noté que todavía necesito integrar algunos cambios que se confirmaron en la rama de lanzamiento en la rama de desarrollo .
El problema es que no necesito toda la confirmación, solo algunos trozos en ciertos archivos, así que un simple
git cherry-pick bc66559
no hace el truco
Cuando hago un
git show bc66559
Puedo ver la diferencia pero realmente no conozco una buena manera de aplicarlo parcialmente a mi árbol de trabajo actual.
Lo principal que querrás aquí es git add -p
( -p
es un sinónimo de --patch
). Esto proporciona una forma interactiva de verificar el contenido, lo que le permite decidir si cada hunk debería ingresar e incluso le permite editar manualmente el parche si es necesario.
Para usarlo en combinación con cherry-pick:
git cherry-pick -n <commit> # get your patch, but don''t commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(Gracias a Tim Henigan por recordarme que git-cherry-pick tiene una opción --no-commit, y gracias a Felix Rabe por señalar que necesita reiniciar. Si solo quiere dejar algunas cosas fuera del commit , puedes usar git reset <path>...
para desarreglar solo esos archivos.)
Por supuesto, puede proporcionar rutas específicas para add -p
si es necesario. Si está comenzando con un parche, podría reemplazar el cherry-pick
con apply
.
Si realmente quieres un git cherry-pick -p <commit>
(esa opción no existe), puedes usar
git checkout -p <commit>
Eso difiere el compromiso actual contra el compromiso que especifique, y le permite aplicar hunks desde ese diff individualmente. Esta opción puede ser más útil si la confirmación que está obteniendo tiene conflictos de fusión en parte de la confirmación en la que no está interesado. (Tenga en cuenta, sin embargo, que la checkout
difiere de cherry-pick
de cherry-pick
: la checkout
intenta aplicar <commit>
'' s contenido por completo, cherry-pick
aplica la diferencia de la confirmación especificada de su padre. Esto significa que la checkout
puede aplicar más que solo la confirmación, que puede ser más de lo que desea.
Sé que estoy respondiendo una vieja pregunta, pero parece que hay una nueva forma de hacerlo con la comprobación interactiva:
git checkout -p bc66559
Crédito a Can I pick it hunks de otro git commit?
Si "en parte picking cherry" significa "dentro de los archivos, eligiendo algunos cambios pero descartando otros", se puede hacer trayendo git stash
:
- Haga la selección completa de la cereza.
-
git reset HEAD^
para convertir la confirmación completa seleccionada en cambios de trabajo no organizados. - Ahora
git stash save --patch
: selecciona interactivamente el material no deseado para esconder. - Git revierte los cambios ocultos de su copia de trabajo.
-
git commit
- Deseche el alijo de los cambios no deseados:
git stash drop
.
Consejo: si le git stash save --patch junk
un nombre al alijo de cambios no deseados: git stash save --patch junk
luego si olvida hacer (7) ahora, más adelante reconocerá el stash por lo que es.
Sobre la base de la respuesta de Mike Monkiewicz , también puede especificar uno o más archivos para el pago de la sha1 / branch suministrada.
git checkout -p bc66559 -- path/to/file.java
Esto le permitirá elegir de manera interactiva los cambios que desea aplicar a su versión actual del archivo.
Suponiendo que los cambios que desea están a la cabeza de la rama desde la que desea los cambios, use git checkout
para un solo archivo:
git checkout branch_that_has_the_changes_you_want path/to/file.rb
para múltiples archivos solo en cadena:
git checkout branch_that_has_the_changes_you_want path/to/file.rb path/to/other_file.rb