He realizado varias confirmaciones en diferentes archivos, pero hasta ahora me gustaría enviar a mi repositorio remoto solo una confirmación específica.
¿Es eso posible?
He realizado varias confirmaciones en diferentes archivos, pero hasta ahora me gustaría enviar a mi repositorio remoto solo una confirmación específica.
¿Es eso posible?
Respuestas:
Para avanzar a través de una confirmación dada, puede escribir:
git push <remotename> <commit SHA>:<remotebranchname>
siempre <remotebranchname>
existe en el control remoto. (Si no es así, puede usarlo git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
para crearlo automáticamente).
Si desea impulsar una confirmación sin presionar las confirmaciones anteriores, primero debe usar git rebase -i
para reordenar las confirmaciones.
git push <remotename> <commit SHA>:<remotebranchname>
trabajos. el truco es combinarlo git rebase -i
para mover el commit que desea como primer commit y especificar ese commit-sha
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>
. Después de esto, presione como lo describe la respuesta.
git push origin HEAD~1:master
.
-f
bandera.
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 enviadas, no debe confundirse con la confirmación superior, la primera o la sugerencia, que en mi opinión son descripciones ambiguas. El commit necesita el más antiguo de sus commits, es decir, el más alejado de su commit más reciente. Si no es la confirmación más antigua, se enviarán todas las confirmaciones de su SHA local, no empujado más antiguo al SHA especificado. Para reordenar las confirmaciones use:
git rebase -i HEAD~xxx
Después de reordenar el commit, puede enviarlo de manera segura al repositorio remoto.
Para resumir, solía
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
para enviar un solo commit a mi rama maestra remota.
Referencias
Ver también:
Sugeriría usar git rebase -i
; mueve la confirmación que deseas impulsar a la parte superior de las confirmaciones que has realizado. Luego, use git log
para obtener el SHA de la confirmación modificada, compruébelo y empújelo. El rebase asegurará que todos tus otros commits sean ahora hijos del que presionaste, por lo que los empujes futuros también funcionarán bien.
git log
paso?
Cherry-pick funciona mejor en comparación con todos los demás métodos, mientras que empuja una confirmación específica.
La forma de hacerlo es:
Crea una nueva sucursal -
git branch <new-branch>
Actualice su nueva sucursal con su sucursal de origen:
git fetch
git rebase
Estas acciones asegurarán que tengas exactamente las mismas cosas que tu origen.
Elige el sha id
que quieres hacer.
git cherry-pick <sha id of the commit>
Puedes obtenerlo sha id
corriendo
git log
Empújalo a tu origen
git push
Corre gitk
para ver que todo se ve de la misma manera que querías.
git rebase -i
será la solución ideal como se sugiere en las soluciones anteriores. La selección de cereza debe usarse solo cuando desee duplicar la confirmación.
Creo que tendrías que "volver atrás" a ese compromiso y luego empujarlo. O podría cherry-pick
comprometerse en una nueva rama y enviarla a la rama en el repositorio remoto. Algo como:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pick
el commit que quieras.
También podría, en otro directorio: