Eu tenho um projeto em um repositório remoto, sincronizado com um repositório local (desenvolvimento) e o servidor (prod). Eu tenho feito algumas alterações confirmadas já enviadas para remoto e extraídas do servidor. Agora, quero desfazer essas alterações. Então, eu poderia apenas git checkout
confirmar antes das alterações e confirmar as novas, mas acho que haverá problemas para enviá-las novamente para o remoto. Alguma sugestão de como devo proceder?
609
Respostas:
Você pode reverter confirmações individuais com:
Isso criará um novo commit que reverterá as alterações do commit que você especificou. Observe que ele apenas reverte esse commit específico e não confirma depois disso. Se você deseja reverter uma série de confirmações, pode fazer o seguinte:
Reverte as confirmações entre e incluindo as confirmações especificadas.
Veja a página de manual do git-revert para obter mais informações sobre o
git revert
comando. Veja também esta resposta para obter mais informações sobre como reverter confirmações.fonte
git log
<oldest_commit_hash>
de ser incluído na lista de reverteUma solução que não mantém vestígios do "desfazer".
NOTA: não faça isso se alguém já tiver efetuado sua alteração (eu usaria isso apenas no meu repo pessoal)
Faz:
isso fará o check-out de todas as atualizações localmente (para que o status do git listará todos os arquivos atualizados)
você "faz seu trabalho" e reenvia suas alterações (Nota: esta etapa é opcional)
Neste momento, sua árvore local difere do controle remoto
empurrará e forçará o controle remoto a considerar esse empurrão e removerá o anterior (a especificação de nome remoto e nome da filial não é obrigatória, mas é recomendável evitar a atualização de todas as ramificações com sinalizador de atualização).
!! cuidado, algumas tags ainda podem estar apontando remoção removida! como excluir uma tag remota
fonte
git push -f
a última confirmação correta e o histórico remoto limpo! Obrigado!O que faço nesses casos é:
No servidor, mova o cursor de volta para a última confirmação válida:
Localmente, faça o mesmo:
Veja um exemplo completo em uma ramificação
my_new_branch
que eu criei para esse fim:Este é o histórico recente após adicionar algumas coisas a
myfile.py
:Eu quero me livrar do último commit, que já foi enviado, então eu corro:
Agradável! Agora vejo que o arquivo que foi alterado nesse commit (
myfile.py
) é exibido em "não preparado para commit":Como não quero essas alterações, apenas movo o cursor de volta localmente também:
Então agora o HEAD está no commit anterior, tanto local quanto remoto:
fonte
Você pode REVERT (ou também pode chamá-lo DELETE ) o Git Commit AMB local e remotamente se você seguir as etapas conforme indicado abaixo através da linha de comando git.
Execute o seguinte comando para ver o ID de confirmação que você deseja reverter
Você verá uma captura de tela a seguir
Se você também verificar remotamente (via Interface da Web) , poderá ver que isso seria o mesmo mostrado abaixo
Conforme a captura de tela atualmente, você está no ID de confirmação e110322, no entanto, deseja reverter para 030bbf6 AMBOS LOCALMENTE E REMOTAMENTE .
Execute as etapas a seguir para DELETE / REVERT Commits localmente + remotamente
Primeira reversão local para confirmar o ID 030bbf6
Seguido por
Esses dois comandos limpam a força de redefinição para confirmar o estágio 030bbf6, como mostrado abaixo na captura instantânea
agora, se você executar o status git, verá que está DOIS comprometidos atrás da ramificação remota, como mostrado abaixo
Execute o seguinte para atualizar seus índices (se houver alguma atualização). É recomendável que você peça a todos os desenvolvedores para não aceitar solicitações de recebimento na filial remota principal.
Depois que você terminar, será necessário enviar este commit com força usando o símbolo + na frente do branch, como mostrado abaixo. Eu usei aqui como filial principal , você pode substituí-lo por qualquer
Código
Agora, se você vir a interface da Web de remote, confirme também deve ser revertida.
fonte
Isso removerá seus commit enviados
fonte
Na linha de código acima. "Último argumento representa"
1 - reverte uma confirmação.
2 - reverte os últimos dois commits.
n - reverte o último n confirma.
Você precisa pressionar este comando para ativar o controle remoto. Você tem outras opções, como especificar o intervalo de confirmações para reverter. Essa é uma das opções.
Mais tarde, use
git commit -am "COMMIT_MESSAGE"
entãogit push
ougit push -f
fonte
git revert ref1..ref2
2020 maneira simples:
(O hash do último commit que você deseja manter).
Você manterá as alterações agora não confirmadas localmente.
Se você deseja pressionar novamente, você deve fazer:
fonte
Aqui está o meu caminho:
Digamos que o nome do ramo seja
develop
.fonte
Você pode fazer algo como
fonte