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 -i
para reordenar as confirmações.
git push <remotename> <commit SHA>:<remotebranchname>
trabalho. o truque é combiná-lo com git rebase -i
a 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
.
-f
bandeira.
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 log
para 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 log
passo?
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 id
que deseja fazer -
git cherry-pick <sha id of the commit>
Você pode obter o sha id
executando
git log
Empurre-o para a sua origem -
git push
Corra gitk
para ver que tudo parece da maneira que você queria.
git rebase -i
será 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-pick
comprometer 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-pick
confirmar o que deseja.
Você também pode, em outro diretório: