remove - git tag best practices
¿Cómo puedo enviar un compromiso específico a un control remoto, y no a compromisos anteriores? (6)
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?
Cherry-pick funciona mejor en comparación con todos los demás métodos al tiempo que presiona un compromiso específico.
La forma de hacerlo es:
Crear una nueva rama -
git branch <new-branch>
Actualice su nueva sucursal con su sucursal de origen -
git fetch
git rebase
Estas acciones asegurarán que usted tenga exactamente lo mismo que su origen.
Cereza, elige la sha id
que quieres hacer.
git cherry-pick <sha id of the commit>
Usted puede obtener la sha id
ejecutando
git log
Empújalo a tu origen -
git push
Ejecuta gitk
para ver que todo se ve de la misma manera que querías.
Creo que tendrías que "revertir" de nuevo a ese compromiso y luego empujarlo. O puede cherry-pick
un compromiso en una nueva rama y enviarlo 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}
Las otras respuestas faltan en las descripciones de reordenación.
git push <remotename> <commit SHA>:<remotebranchname>
empujará un solo compromiso, pero ese compromiso debe ser el MÁS ANTIGUO de sus compromisos locales, no empujados, no debe confundirse con el principio, primero o cometer consejo, que en mi opinión son todas descripciones ambiguas. El compromiso debe ser el más antiguo de sus compromisos, es decir, el más lejano de su compromiso más reciente. Si no es la confirmación más antigua, se enviarán todas las confirmaciones de su SHA local, más antigua, no enviada a la SHA especificada. Para reordenar los usos comprometidos:
git rebase -i HEAD~xxx
Después de reordenar la confirmación, puede enviarla de forma segura al repositorio remoto.
Para resumir, utilicé
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
para empujar un solo compromiso a mi rama maestra remota.
Referencias:
- http://blog.dennisrobinson.name/push-only-one-commit-with-git/
- http://blog.dennisrobinson.name/reorder-commits-with-git/
Ver también:
Para subir a través de un compromiso dado, puedes escribir:
git push <remotename> <commit SHA>:<remotebranchname>
siempre que <remotebranchname>
ya exista en el control remoto. (Si no lo hace, puede usar git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
para autocrearlo).
Si desea enviar una confirmación sin presionar las confirmaciones anteriores, primero debe usar git rebase -i
para reordenar las confirmaciones.
EDITAR
Para obtener una descripción más completa de lo que debe hacer, consulte la respuesta de @ Samuel: https://.com/a/27907287/889213
Referencias:
Probé la solución sugerida:
git push <remotename> <commit SHA>:<remotebranchname>
Me gusta esto:
git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
En mi caso, el master tenía 5 confirmaciones por delante y solo quería presionar mi última confirmación, pero lo anterior terminó impulsando todos mis cambios hasta e incluyendo la confirmación mencionada. Me parece que el método cherry-pick podría ser un mejor enfoque para este caso de uso.
Yo sugeriría usar git rebase -i
; mueva la confirmación que desea empujar a la parte superior de las confirmaciones que ha realizado. Luego use git log
para obtener el SHA de la confirmación rebasada, verifíquelo y presione. El rebase asegurará que todos sus otros compromisos sean ahora hijos del que usted presionó, por lo que los futuros empujes también funcionarán bien.