Como posso enviar um commit específico para um commit remoto e não anterior?

Eu fiz vários commits em arquivos diferentes, mas até agora eu gostaria de enviar para o meu repository remoto apenas um commit específico.

Isso é possível?

    Para empurrar para cima através de um determinado commit, você pode escrever:

    git push  : 

    fornecido já existe no controle remoto. (Se isso não acontecer, você pode usar o git push :refs/heads/ para git push :refs/heads/ .)

    Se você quiser empurrar um commit sem pressionar commits anteriores, você deve primeiro usar o git rebase -i para reordenar os commits.

    EDITAR

    para uma descrição mais completa do que fazer para verificar a resposta do @ Samuel: https://stackoverflow.com/a/27907287/889213

    Referências:

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

    Tentei a solução sugerida:

    git push :

    como isso:

    git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master

    No meu caso, o master tinha 5 commits à frente e eu só queria empurrar o meu último commit, mas o acima acabou empurrando todas as minhas alterações até e incluindo o commit nomeado. Parece-me que o método cherry-pick pode ser uma abordagem melhor para este uso.

    As outras respostas estão faltando nas descrições de reordenamento.

     git push  : 

    vai empurrar um único commit, mas esse commit tem que ser o OLDEST do seu commit local, não-push, não deve ser confundido com o top, first, ou tip commit, que são descrições ambíguas na minha opinião. O commit precisa do mais antigo dos seus commits, ou seja, o mais distante do seu commit mais recente. Se não for o commit mais antigo, todos os commits do seu SHA mais antigo, local e não enviado, para o SHA especificado, serão enviados. Para reordenar os commits, use:

     git rebase -i HEAD~xxx 

    Depois de reordenar o commit, você pode empurrá-lo com segurança para o repository remoto.

    Para resumir, usei

     git rebase -i HEAD~ git push origin :master 

    para enviar um único commit para minha ramificação mestre remota.

    Referências:

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

    Veja também:

    1. git: Confirmações duplicadas após o rebase local seguido por pull
    2. git: Empurrando Single Commits, Reordenando com Rebase, Commits Duplicados

    Eu sugiro usar git rebase -i ; mova o commit que você quer empurrar para o topo dos commits que você fez. Em seguida, use o git log para obter o SHA do commit, confira e pressione. O rebase garantirá que todos os seus outros commits sejam agora filhos daquele que você empurrou, então os futuros push funcionarão bem também.

    O Cherry-pick funciona melhor em comparação com todos os outros methods, ao mesmo tempo que envia um commit específico.

    A maneira de fazer isso é:

    Crie um novo ramo –

     git branch  

    Atualize sua nova filial com sua ramificação de origem –

     git fetch git rebase 

    Essas ações farão com que você tenha exatamente o mesmo material que sua origem.

    Cherry-pick o sha id que você quer fazer push –

     git cherry-pick  

    Você pode obter o sha id executando

     git log 

    Empurre para sua origem –

     git push 

    Execute gitk para ver que tudo parece da mesma maneira que você queria.

    Eu acredito que você teria que “git reverter” de volta para o commit e depois empurrá-lo. Ou você pode cherry-pick um commit em um novo branch e enviá-lo para o branch no repository remoto. Algo como :

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