tag - git: push un solo commit
git tags best practices (4)
Digamos que hice varios commits y deseo elegir de forma inteligente cuáles presiono para el repositorio remoto. ¿Cómo puedo hacer eso (en ascii: C1-> C2-> C3-> C4 y quiero presionar C2 y C4). ¿Reordenarán con rebase, restablecer, presionar y luego restablecer el trabajo? (C1-> C2-> C3-> C4 => C2-> C4-> C1-> C3 => restablecer C4 => pulsar => restablecer C3). ¿Hay una manera más agradable?
IIRC, debido a la forma en que git considera comprometerse a trabajar, C4 incluye inherentemente C3, por lo que el concepto de "presionar C4 pero no C3" no tiene sentido para git (y también C2 en relación con C1). (Vea la respuesta a esta pregunta anterior ).
Que estas buscando:
git push origin commit-id:master
El crédito va a: http://blog.dennisrobinson.name/push-only-one-commit-with-git/
Notas explicatorias:
- Al presionar una confirmación, se presionan todas las confirmaciones (como dijo Amber). La clave es volver a ordenar las confirmaciones (
git rebase -i
) primero, para que estén en el orden en que desea aplicarlas. - El método sugerido branch + cherry-pick (sugerido por midtiby) también funciona, pero ¿por qué crear ramas desechables cuando no es necesario?
-
commit-id
no tiene que ser un sha1. Para enviar todo antes de que se confirme la última N, use "HEAD ~ N" en lugar decommit-id
.
Si está presionando una rama que aún no existe en el repositorio remoto, prefija la rama remota con refs/heads/
, como por ejemplo:
git push origin HEAD~1:refs/heads/completely-new-branch
(Si no, git lo castigará con este mensaje de error irremediable ).
Si tiene sus confirmaciones en una sucursal privada, puede seleccionar las confirmaciones de la sucursal privada y aplicarlas a la sucursal oficial. En este punto, ahora puede enviar todas sus confirmaciones a la sucursal oficial (que es el subconjunto que seleccionó previamente).
$ git push <remote name> <commit hash>:<remote branch name>
# Example:
$ git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master