Cometi um erro e não sei como excluir meu push mais recente no repositório. Eu puxo as atualizações mais recentes do aplicativo, mas há conflitos e empurro para o repositório.
Como deletar meu último commit? Ou como consertar?
fonte
Cometi um erro e não sei como excluir meu push mais recente no repositório. Eu puxo as atualizações mais recentes do aplicativo, mas há conflitos e empurro para o repositório.
Como deletar meu último commit? Ou como consertar?
Em primeiro lugar, se você está trabalhando com outras pessoas no mesmo repositório de código, você não deve excluir um commit, pois quando você força a atualização no repositório, isso deixará os repositórios locais de seus colegas de trabalho em um estado ilegal (por exemplo, se eles fez commits após aquele que você excluiu, esses commits serão inválidos, pois foram baseados em um commit inexistente).
Dito isso, o que você pode fazer é reverter o commit. Este procedimento é feito de forma diferente (comandos diferentes) dependendo do CVS que você está usando:
No git :
git revert <commit>
No mercurial :
hg backout <REV>
EDITAR: A operação de reversão cria um novo commit que faz o oposto do commit revertido (por exemplo, se o commit original adicionou uma linha, o commit de reversão deleta essa linha), efetivamente removendo as mudanças do commit indesejado sem reescrever o histórico do repositório.
git backout <REV>
? Ouhg backout <REV>
:?Se você não está trabalhando com outros (ou está feliz em causar-lhes um aborrecimento significativo) , então é possível remover os commits dos branches do bitbucket.
Se você estiver tentando alterar um branch não mestre:
se você está tentando mudar o branch master
No git geralmente, o branch master não é especial - é apenas uma convenção. No entanto, bitbucket e github e sites semelhantes geralmente exigem que haja um branch principal (presumivelmente porque é mais fácil do que escrever mais código para lidar com o evento de que um repositório não tem branches - não tenho certeza). Portanto, você precisa criar um novo branch e torná-lo o principal:
No Bitbucket, vá para as configurações do repositório e altere o "Branch principal" para
master_temp
(no Github, altere o "branch padrão").Agora vá para o Bitbucket e deverá ver o histórico que deseja. Agora você pode ir para a página de configurações e alterar o branch principal de volta para
master
.Este processo também funcionará com quaisquer outras alterações de histórico (por exemplo
git filter-branch
). Você apenas tem que se certificar de redefinir os commits apropriados, antes que o novo histórico se separe do antigo.editar : aparentemente, você não precisa ter todo esse trabalho no github, já que pode forçar um push de reset .
Lidando com colaboradores irritados
Da próxima vez que alguém tentar fazer um pull de seu repositório (se já tiver puxado o commit incorreto), o pull falhará. Eles terão que redefinir manualmente para um commit antes do histórico alterado, e então puxar novamente.
Se eles retiraram o commit ruim e se comprometeram em cima dele , então eles terão que reiniciar, e então
git cherry-pick
os commits bons que eles querem criar, recriando efetivamente todo o branch sem o commit ruim.Se eles nunca retiraram o commit ruim, todo esse processo não os afetará e eles podem fazer o pull normalmente.
fonte
você pode redefinir para, em
HEAD^
seguida, force push.Ele irá deletar seu último commit e irá refletir no bitbucket como commit deletado, mas ainda permanecerá em seu servidor.
fonte
Tive problemas com git revert no passado (principalmente porque não tenho certeza de como funciona). Tive problemas para reverter por causa de problemas de mesclagem.
Minha solução simples é esta.
Passo 1.
seu projeto em outra pasta, então:
Passo 2.
em seguida, Etapa 3.
em seu diretório de projeto mais recente (e principal) (aquele que tem o último commit problemático) cole os arquivos da etapa 2
Passo 4.
Etapa 5.
Aproveitar
fonte
git revert
é simples: ele cria um novo commit que faz o reverso das mudanças em um commit anterior (ou commits múltiplos). Ele não exclui commits, então não é relevante para esta questão. Além disso, a etapa de clonagem aqui não é realmente necessária.Aqui está uma abordagem simples em até 4 etapas:
0 - Avise a equipe que você vai consertar o repositório
Conecte-se com a equipe e informe-os sobre as próximas mudanças.
1 - Remova o último commit
Supondo que seu branch alvo seja
master
:Neste ponto, você terá concluído se estiver trabalhando sozinho.
2 - Corrija os repositórios locais do seu colega de equipe
No de seu colega de equipe:
Se o seu companheiro de equipe não tinha novos commits, você terminou neste ponto e deve estar sincronizado.
3 - Trazendo de volta commits perdidos
Digamos que um colega de equipe tivesse um commit novo e não publicado que foi perdido neste processo.
Faça isso para quantos commits forem necessários.
Usei essa abordagem com sucesso muitas vezes. Exige um esforço de equipe para garantir que tudo esteja sincronizado.
fonte
Como já foi dito, geralmente você deseja usar
hg backout
ougit revert
. No entanto, às vezes você realmente deseja se livrar de um commit.Primeiro, você vai querer ir para as configurações do seu repositório. Clique no
Strip commits
link.Insira a ID do changeset para o changeset que deseja destruir e clique em
Preview strip
. Isso permitirá que você veja que tipo de dano está prestes a causar antes de fazê-lo. Em seguida, basta clicarConfirm
e seu commit não é mais história. Certifique-se de dizer a todos os seus colaboradores o que você fez, para que eles não atrasem acidentalmente o commit ofensivo.fonte
Uma vez que as alterações foram confirmadas, não será possível excluí-las. porque a natureza básica do commit é não deletar.
O que você pode fazer (método fácil e seguro),
Rebase interativo:
1)
git rebase -i HEAD~2
#will mostrará seus 2 commits recentes2) Seu commit irá listar como, Recente aparecerá na parte inferior da página LILO (último na última saída)
Exclua a última linha do commit inteiramente
3) salvar por
ctrl+X
ouESC:wq
agora seu branch será atualizado sem seu último commit.
fonte
Você pode escrever o comando também para o Bitbucket, conforme mencionado por Dustin :
Para remover o último commit localmente no git, use:
fonte
Até agora, o cloud bitbucket (não tenho certeza de qual versão) permite reverter um commit do sistema de arquivos da seguinte maneira (não vejo como reverter a partir da interface do Bitbucket no navegador Chrome).
-backup de todo o seu diretório para proteger as alterações que você inadvertidamente cometeu
-selecionar diretório retirado
-botão direito do mouse: menu git tartaruga
-repo-browser (a opção de menu 'reverter' apenas desfaz as alterações não confirmadas)
- pressione o botão HEAD
-selecione a linha superior (o último commit)
-botão direito do mouse: reverter alteração por este commit
- depois de desfazer as mudanças no sistema de arquivos, pressione commit
- isso atualiza o GIT com uma mensagem 'Reverter (sua mensagem anterior). Isso reverte o commit fulano de tal '
-selecione 'confirmar e enviar'.
fonte