git-commit Remover arquivos do Git commit - CODE Q&A Resolvido
git-commit Remover arquivos do Git commit
ATENÇÃO ! Se você quiser apenas remover um arquivo do seu commit anterior e mantê-lo no disco , leia a resposta do juzzlin logo acima.
Se este for seu último commit e você quiser excluir completamente o arquivo do seu repositório local e remoto , você pode:
remova o arquivo git rm <file>
commit com o sinalizador de alteração: git commit --amend
O sinalizador de alteração diz ao git para confirmar novamente, mas "mesclar" (não no sentido de mesclar dois ramos) este commit com o último commit.
Como dito nos comentários, usar o git rm aqui é como usar o próprio comando rm !
Eu estou usando o Git e eu cometi poucos arquivos usando
Mais tarde, descobri que um arquivo foi adicionado por engano ao commit.
Como posso remover um arquivo do último commit?
Como a resposta aceita indica, você pode fazer isso redefinindo todo o commit. Mas esta é uma abordagem bastante pesada.
Uma maneira mais limpa de fazer isso seria manter o commit e simplesmente remover os arquivos alterados dele.
A git reset o arquivo como estava no commit anterior e o colocará no índice. O arquivo no diretório de trabalho está intacto.
O git commit irá então confirmar e esmagar o índice no commit atual.
Isso essencialmente pega a versão do arquivo que estava no commit anterior e o adiciona ao commit atual. Isso resulta em nenhuma alteração de rede e, portanto, o arquivo é efetivamente removido da confirmação.
Remover o arquivo usando rm irá apagá-lo!
Você está sempre adicionando a um commit no git ao invés de remover, então nesta instância retorne o arquivo para o estado em que estava antes do primeiro commit (isso pode ser uma ação delete 'rm' se o arquivo é novo) e então re-commit e o arquivo irá.
Para retornar o arquivo para algum estado anterior:
ou para devolvê-lo ao estado na cabeça remota:
Em seguida, alterar o commit e você deve encontrar o arquivo desapareceu da lista (e não excluído do seu disco!)
O seguinte irá unstage apenas o arquivo que você pretendia, que é o que o OP pediu.
Alterações a serem cometidas: (use "git reset HEAD ..." para unstage)
modificado: / caminho / para / arquivo
Mudanças não preparadas para commit: (use "git add ..." para atualizar o que será confirmado) (use "git checkout - ..." para descartar as mudanças no diretório de trabalho)
"Alterações a serem confirmadas" é a versão anterior do arquivo antes do commit. Isso será parecido com uma exclusão se o arquivo nunca existiu. Se você confirmar essa alteração, haverá uma revisão que reverte a alteração no arquivo em sua ramificação.
"Alterações não preparadas para confirmação" é a alteração que você cometeu e o estado atual do arquivo
Neste ponto, você pode fazer o que quiser no arquivo, como redefinir para uma versão diferente.
Quando você estiver pronto para cometer:
ou (se você tem outras mudanças acontecendo que você não quer cometer, ainda)
Se você quiser preservar seu commit (talvez você já tenha passado algum tempo escrevendo uma mensagem de commit detalhada e não queira perdê-la), e você só quer remover o arquivo do commit, mas não do repositório inteiramente:
vai deixar você o arquivo local ainda. Se você não quiser o arquivo localmente, você pode pular a opção --cached.
Se todo o trabalho está em sua filial local, você precisa manter o arquivo em um commit posterior, e como ter um histórico limpo, eu acho que uma maneira mais simples de fazer isso poderia ser:
e você pode terminar o rebase com facilidade sem precisar lembrar de comandos mais complexos ou enviar mensagens ou digitar muito.
Só queria complementar a resposta principal como eu tive que executar um comando extra:
git reset --soft HEAD^ retorna seu commit, e quando você digita git status , ele diz o que fazer:
Tive o mesmo problema em que eu tinha alterações em uma ramificação local onde eu queria reverter apenas um arquivo. O que funcionou para mim foi -
( feature / target_branch abaixo é onde eu tenho todas as minhas alterações, incluindo aquelas que eu queria desfazer em um arquivo específico)
( origem / recurso / target_branch é o ramo remoto para onde eu quero enviar minhas alterações)
( feature / staging é o meu ramo temporário onde eu estarei empurrando de todas as minhas mudanças desejadas excluindo a mudança para aquele arquivo)
Criar um ramo local a partir da minha origem / recurso / target_branch - chamado de recurso / teste
Mesclou meu recurso de ramificação local / target_branch no recurso / ramo de preparação
Recurso check out / staging, em seguida, git reset --soft ORIG_HEAD (Agora, todas as alterações do recurso / staging 'serão testadas, mas não confirmadas.)
Desvendou o arquivo que eu verifiquei anteriormente com alterações desnecessárias
Mudou o ramo de upstream para feature / staging para origin / feature / target_branch
Comprometido com o restante das alterações preparadas e enviado a montante para minha origem / recurso / target_branch remoto
Se você está usando o GitHub e ainda não enviou o commit, o GitHub Desktop resolve esse problema facilmente: