Git: Remover arquivo confirmado após push


105

Existe a possibilidade de reverter um arquivo confirmado no Git? Empurrei um commit para o GitHub e então percebi que há um arquivo que eu não queria que fosse enviado (não terminei as alterações).


Você deseja remover o arquivo completamente do GitHub após um push? Caso contrário, você apenas: git rm <file>, git push.
— rdrmntn de


Respostas:


144

atualização: método mais seguro adicionado

método preferido:

  1. verifique o estado anterior (inalterado) de seu arquivo; observe o traço duplo

    git checkout HEAD^ -- /path/to/file
    
  2. cometê-lo:

    git commit -am "revert changes on this file, not finished with it yet"
    
  3. empurre, nenhuma força necessária:

    git push
    
  4. volte ao seu trabalho inacabado, faça novamente (3 vezes com a seta para cima):

    git checkout HEAD^ -- /path/to/file
    

efetivamente 'descomprometido':

Para modificar o último commit do repositório HEAD, ofuscando seu trabalho acidentalmente empurrado, enquanto pode entrar em conflito com seu colega que já pode ter feito isso, e que vai crescer cabelos grisalhos e perder muito tempo tentando reconciliar o chefe de seu branch local com o central:

Para remover a alteração do arquivo do último commit:

  1. para reverter o arquivo para o estado anterior ao último commit, faça:

    git checkout HEAD^ /path/to/file
    
  2. para atualizar o último commit com o arquivo revertido, faça:

    git commit --amend
    
  3. para enviar o commit atualizado para o repo, faça:

    git push -f
    

Realmente, considere usar o método preferido mencionado antes.


1
A menos que você seja o único desenvolvedor em um projeto, você realmente não deve usar git push -f. Isso cria muito mais problemas do que vale a pena. Apenas remova o arquivo e faça um novo commit.
— richardm

1
@ user553086 não poderia concordar mais. Melhor agora?
— xor

Isso é possível com commits mais antigos na história? Por exemplo, posso fazer isso com git checkout HEAD~2 /path/to/file? Edit: Parece que o que eu queria no meu caso era simplesmentegit rm /path/to/file
— starscream_disco_party

1
Você acabou de me salvar 4 horas mano!
— Tosin Onikute 01 de

52

Se você deseja remover o arquivo do repo remoto, primeiro remova-o do seu projeto com a opção --cache e, em seguida, envie-o:

git rm --cache /path/to/file
git commit -am "Remove file"
git push

(Isso funciona mesmo se o arquivo foi adicionado ao repositório remoto alguns commits atrás) Lembre-se de adicionar ao .gitignore as extensões de arquivo que você não deseja enviar.


2
Isso remove os arquivos deste commit em diante, mas os arquivos ainda estão visíveis nos commits mais antigos.
— Ken

29

Você pode reverter apenas um arquivo para uma revisão especificada.

Primeiro você pode verificar em quais commits o arquivo foi alterado.

git log path/to/file.txt

Então você pode fazer o checkout do arquivo com o número da revisão.

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt

Depois disso, você pode confirmar e enviar novamente.


7

Redefina o arquivo em um estado correto, confirme e envie novamente.

Se tiver certeza de que ninguém mais buscou suas alterações ainda, você pode usar --amend ao fazer o commit, para modificar o seu commit anterior (isto é, reescrever o histórico), e então enviar. Acho que você terá que usar a -fopção ao empurrar, para forçar o empurrão, no entanto.


3
  1. Obtenha o código hash do último commit.

    • git log
  2. Reverter o commit
    • git revert <hash_code_from_git_log>
  3. Empurre as mudanças
    • git push

confira no GHR. você pode obter o que precisa, espero que seja útil

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.