Pregunta ¿Cómo puedo enviar una confirmación específica a un control remoto y no a confirmaciones previas?


He realizado varios commits en diferentes archivos, pero hasta ahora me gustaría enviar a mi repositorio remoto solo un commit específico.

¿Es eso posible?


654
2017-07-12 16:07


origen


Respuestas:


Para empujar a traves de un compromiso determinado, puede escribir:

git push <remotename> <commit SHA>:<remotebranchname>

previsto <remotebranchname> ya existe en el control remoto. (Si no lo hace, puede usar git push <remotename> <commit SHA>:refs/heads/<remotebranchname> para autocrearlo).

Si desea enviar un compromiso sin presionando commits previos, deberías primero usar git rebase -i para reordenar los commits.

EDITAR

a una descripción más completa de qué hacer ver la respuesta @ Samuel: https://stackoverflow.com/a/27907287/889213

Referencias

  1. http://blog.dennisrobinson.name/push-only-one-commit-with-git/
  2. http://blog.dennisrobinson.name/reorder-commits-with-git/

829
2017-07-12 16:27



Probé la solución sugerida:

git push <remotename> <commit SHA>:<remotebranchname>

Me gusta esto:

git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master

En mi caso, el maestro tenía 5 commits por delante y solo quería presionar mi último commit, pero lo anterior terminó empujando todos mis cambios hasta incluir el commit nombrado. Me parece que el método de selección selectiva podría ser un mejor enfoque para este uso.


123
2017-12-22 19:30



Las otras respuestas faltan en las descripciones de reordenamiento.

git push <remotename> <commit SHA>:<remotebranchname>

empujará una única confirmación, pero esa confirmación debe ser la más antigua de sus confirmaciones locales, no empujadas, que no debe confundirse con la confirmación superior, la primera o la sugerencia, que en mi opinión son descripciones ambiguas. El compromiso debe ser el más antiguo de tus compromisos, es decir, el más alejado de tu compromiso más reciente. Si no es la confirmación más antigua, se presionarán todas las confirmaciones de su SHA local más antiguo, no empujado, al SHA especificado. Para reordenar los commits usa:

git rebase -i HEAD~xxx

Después de reordenar la confirmación, puede insertarla de manera segura en el repositorio remoto.

Para resumir, utilicé

git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master

para enviar una única confirmación a mi rama maestra remota.

Referencias

  1. http://blog.dennisrobinson.name/push-only-one-commit-with-git/
  2. http://blog.dennisrobinson.name/reorder-commits-with-git/

Ver también:

  1. git: Complicaciones duplicadas después de una rebase local seguida de pull
  2. git: Empujar Comisiones simples, Reordenar con rebase, Compromisos duplicados

45
2018-01-12 17:12



Sugeriría usar git rebase -i; mueva la confirmación que desea presionar a la parte superior de las confirmaciones que ha realizado. Entonces usa git log para obtener el SHA del compromiso rebasado, compruébalo e introdúcelo. La rebase se asegurará de que todos tus otros commits sean ahora hijos del que presionaste, por lo que los push futuros funcionarán bien también.


25
2017-07-13 11:04



Cherry-pick funciona mejor en comparación con todos los demás métodos al tiempo que empuja un compromiso específico.

La forma de hacerlo es:

Crea una nueva rama -

git branch <new-branch>

Actualice su nueva sucursal con su rama de origen -

git fetch

git rebase

Estas acciones asegurarán que exactamente tengas las mismas cosas que tu origen.

Cherry-recoger el sha id que quieres hacer push -

git cherry-pick <sha id of the commit>

Puedes obtener el sha id mediante la ejecución

git log

Empujarlo a su origen -

git push

correr gitk para ver que todo se ve de la manera que querías


18
2017-10-16 23:07



Creo que tendrías que "volver atrás" a esa confirmación y luego presionarla. O podrías cherry-pickun compromiso en una nueva sucursal, y enviarlo a la sucursal en el repositorio remoto. Algo como :

git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}

8
2017-07-12 16:12