Fiz vários commits em arquivos diferentes, mas até agora gostaria de enviar ao meu repositório remoto apenas um commit específico.
Isso é possível?
Fiz vários commits em arquivos diferentes, mas até agora gostaria de enviar ao meu repositório remoto apenas um commit específico.
Isso é possível?
Respostas:
Para avançar através de um determinado commit, você pode escrever:
git push <remotename> <commit SHA>:<remotebranchname>
fornecido <remotebranchname>já existe no remoto. (Caso contrário, você pode usá git push <remotename> <commit SHA>:refs/heads/<remotebranchname>-lo para criar automaticamente.)
Se você deseja enviar uma confirmação sem enviar confirmações anteriores, use primeiro git rebase -ipara reordenar as confirmações.
git push <remotename> <commit SHA>:<remotebranchname>trabalho. o truque é combiná-lo com git rebase -ia mover a cometer você quer como o primeiro cometer, e especificar que comprometer-sha
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>. Depois disso, pressione como a resposta descreve.
git push origin HEAD~1:master.
-fbandeira.
As outras respostas estão faltando nas descrições de reordenação.
git push <remotename> <commit SHA>:<remotebranchname>
enviará um único commit, mas esse commit deve ser o MAIS ANTIGO do seu local, não push, commit, para não ser confundido com o commit top, first ou tip, que são descrições ambíguas na minha opinião. A confirmação precisa da confirmação mais antiga, ou seja, a mais distante da confirmação mais recente. Se não for a confirmação mais antiga, todas as confirmações do seu SHA local mais antigo e não enviado para o SHA especificado serão enviadas. Para reordenar as confirmações, use:
git rebase -i HEAD~xxx
Após reordenar o commit, você pode enviá-lo com segurança para o repositório remoto.
Para resumir, eu usei
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
para enviar uma única confirmação ao meu ramo principal remoto.
Referências:
Veja também:
Eu sugiro usar git rebase -i; mova o commit que você deseja enviar para o topo dos commit que você fez. Em seguida, use git logpara obter o SHA do commit rebased, verifique e pressione-o. A rebase terá assegura que todos os seus outros commit agora sejam filhos daquele que você empurrou, portanto os futuros push funcionarão bem também.
git logpasso?
A seleção de cereja funciona melhor em comparação com todos os outros métodos enquanto pressiona um commit específico.
A maneira de fazer isso é:
Crie uma nova ramificação -
git branch <new-branch>
Atualize sua nova ramificação com sua ramificação de origem -
git fetch
git rebase
Essas ações garantirão que você tenha exatamente as mesmas coisas que sua origem.
Escolha a cereja sha idque deseja fazer -
git cherry-pick <sha id of the commit>
Você pode obter o sha idexecutando
git log
Empurre-o para a sua origem -
git push
Corra gitkpara ver que tudo parece da maneira que você queria.
git rebase -iserá a solução ideal, conforme sugerido nas soluções acima. A seleção de cereja deve ser usada apenas quando você deseja duplicar a confirmação.
Eu acredito que você teria que "reverter" para esse commit e enviá-lo. Ou você pode se cherry-pickcomprometer em uma nova ramificação e enviá-la para a ramificação no repositório remoto. Algo como:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pickconfirmar o que deseja.
Você também pode, em outro diretório: