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).

kmaci
fonte
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.

xor
fonte
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.

Micoru
fonte
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.

René Höhle
fonte
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.

JB Nizet
fonte
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

Babu Krish
fonte