Eu quero reverter para um commit anterior e, em seguida, publicar esse código e, em seguida, voltar para o commit mais recente.
ou seja, meu master está apontando para uma versão de commit mais antiga apenas para que eu possa puxar essa versão, então eu quero voltar para o commit mais recente que eu era inicialmente.
Como posso fazer isso?
Sua pergunta não está clara. Acho que o que você está pedindo é:
O que isso vai fazer? Ele vai empurrar a
$old_commit_id
comprometer-seorigin
como o novo chefeorigin
damaster
filial.Se isso é o que você queria, não precisa tocar em sua
master
filial local .fonte
master (non-fast-forward)
fracasso para mim. A solução @jtdubs funcionou.-f
para forçá-lo - embora o repo remoto possa ser configurado para proibir isso. Eu atualizei a resposta.usar
git reset --hard <old commit number>
ele irá redefinir o HEAD para este antigo commit.
além disso, você precisa usar
git push -f origin
para alterar o repositório remoto também.fonte
Se você deseja evitar forçar push, veja como reverter seu repo para um commit mais antigo e preservar todo o trabalho intermediário:
Feito! Substitua 307a5cd pelo commit que você quiser em seu repo.
(Eu sei que as duas primeiras linhas podem ser combinadas, mas acho que isso torna menos claro o que está acontecendo)
Aqui está graficamente:
Você remove efetivamente c3 e c4 e define seu projeto de volta para c2. No entanto, c3 e c4 ainda estão disponíveis no histórico do seu projeto se você quiser vê-los novamente.
fonte
Supondo um gráfico de confirmação como:
Você deseja primeiro fazer check
master
- out e criar um branch que aponta para ondemaster
atualmente está:Deve ficar assim agora:
Agora que você já está ligado
master
, diremos aomaster
branch para retroceder um commit:Agora,
master
deve ser movido um espaço para trás, mas opointer
branch ainda está no commit mais recente:Neste ponto, você pode enviar
master
para um controle remoto ou qualquer outro lugar e, em seguida, avançar rapidamente e mesclá-lo de volta aopointer
branch. Você pode matar opointer
galho nesse ponto:Final :
fonte
git push origin master
irá falhar com a ponta de seu branch atual atrás de sua contraparte remota . Você também deve passar um sinalizador -f.Você pode apenas
git checkout <commit-id>
fazer o que for necessário paragit checkout master
voltar ao novo código.Se você realmente precisa modificar o código antigo para liberá-lo, provavelmente deve:
Além disso, não posso recomendar o git flow o suficiente. Isso torna tudo muito fácil.
fonte
Para mover para uma versão anterior:
git checkout <version hash>
faça o seu trabalho aqui e comprometa-o com
git commit --amend
Para voltar ao mestre :
git checkout master
fonte
git reset --hard
apontou seu branch master de volta para o commit antigo, entãogit checkout master
não fará nada.commit --amend
etapa é útil o suficiente--amend
?