Depois de ver o seguinte na linha de comando:
# On branch RB_3.0.10
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.htm
Estou tentando descartar minhas alterações digitando o comando:
git checkout -- index.htm
mas quando eu executo o status do git, ele parece exatamente o mesmo. O check-out não parece estar funcionando. Estou fazendo algo errado? Estou usando o GIT 1.6.1.2 no windows / cygwin.
# On branch RB_3.0.10
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.htm
git checkout HEAD -- index.htm
(check-out do último estado comprometido, em vez de check-out do índice) as obras?git checkout HEAD -- index.htm
trabalhou para mim!Respostas:
Isso está me incomodando há um tempo, quase todos os repositórios que eu conferia tinham alterações que não podia descartar. Para encurtar a história, tentei todas as opções acima, nada funcionou. Foi o que fiz para voltar ao normal (em um Mac):
fonte
Aqui está minha experiência, defina as seguintes variáveis em
.git/config
:depois corra
$ git checkout HEAD .
e funcione. mas$ git checkout -- .
não estranho!* git versão 1.9.3
fonte
Quais alterações são
git diff
exibidas no arquivo? No Windows, vi problemas com terminações de linhas causando problemas como este. Nesse caso, veja quais configurações você possuigit config core.autocrlf
egit config core.safecrlf
. Há alguma documentação para essas configurações aqui .Eu diria que, se você estiver usando
git svn
para integração com o subversion, verifique seautocrlf
está desativado. Pelo que posso dizer, está quebrado nesta configuração e faz com que a maioria das ferramentas pense que os arquivos foram alterados quando você faz umcheckout
para reverter as alterações.Se você estiver vendo um problema em que está
git checkout
, egit status
mostrar que o arquivo ainda está modificado, egit diff
mostra que o arquivo foi modificado em todas as linhas do arquivo, esse é o problema que está ocorrendo.fonte
Eu acho que você precisa passar
-f
Na página do manual (
man git-checkout
, GIT-CHECKOUT (1)):Por exemplo, descarte as alterações na ramificação atual e alterne para uma ramificação diferente:
fonte
-f
para check-out - <filename> como emgit checkout -f -- filename
-f
git checkout -f master
jogou "Já está no 'mestre'", mas as mudanças se foram.Podem ser finais de linha, como o @ 1800-information sugere, mas outra possibilidade é que a diferença (que está impedindo a reversão desses arquivos com um comando de checkout) é do modo de arquivo. Isto é o que aconteceu comigo. Na minha versão do git, você pode descobrir isso usando
E mostrará as alterações no modo de arquivo. No entanto, ele ainda não permitirá que você os reverta usando o checkout, mesmo com a opção -f. Para esse uso, quer
ou altere seu git .config no seu editor de texto adicionando
Depois de fazer isso, você pode usar
e o arquivo deve desaparecer.
(Entendi tudo isso com as respostas para Como faço para o git ignorar as alterações do modo (chmod)? E atualizar as permissões de arquivo apenas no git )
fonte
Você está no OSX ou no Windows? Nesse caso, o problema provavelmente está em ter dois arquivos com o mesmo nome, em maiúsculas e minúsculas. por exemplo. index.htm e Index.htm
O Windows e, por padrão, o OSX, usa um sistema de arquivos que não diferencia maiúsculas de minúsculas, que entra em conflito com o git que diferencia maiúsculas de minúsculas.
fonte
Eu tive esse problema e depois de tentar todas as opções acima, nada funcionou.
O que funcionou para mim foi excluir o diretório em que o arquivo estava e, em seguida, fez
git status
e certificou-se de que todos os arquivos nesse diretório agora estejam marcados como excluídos. Depois disso, simplesmente fizgit checkout -f
e tudo voltou ao normal.fonte
Eu estava trabalhando em um
libGDX
projetoAndroid Studio
e queria descartar todas as alterações que fiz e nada funcionou para mim. A solução que surgiu foi a de comprometer todas as alterações em uma nova ramificação.e então você pode excluir a
TRASH
ramificação, se desejar.fonte
Eu tive o mesmo problema, nada dos comentários acima funcionou. Acontece que o meu sistema de arquivos não diferencia maiúsculas de minúsculas (padrão osx, mas o Windows provavelmente se comporta da mesma forma) e um arquivo estava presente com maiúsculas e minúsculas no mesmo diretório, com conteúdo diferente. Como no meu computador os dois nomes apontavam para o mesmo arquivo, o status git sempre mostrava uma modificação, não importa o que eu fiz. Para resolver o problema:
Eu tive que remover um dos arquivos de outro computador e empurrá-lo para repo
exclua toda a versão local completamente
git clone do zero
fonte
Eu tive um problema semelhante, no qual não me permitia descartar arquivos que não existem ou foram alterados. Uso o Visual Studio no trabalho e descobri que isso acontece ao alternar ramificações enquanto o aplicativo está em execução.
git checkout
e tentar descartar não ajudou. Não funcionaria ou apenas me diria que não tenho permissão.Solução que funcionou:
Reiniciar é uma dor, mas isso funcionou mais rápido do que tentar 100 coisas.
fonte
Existe uma solução fácil. Se isso acontecer (normalmente devido ao desligamento inesperado do Windows ou ao despejo de memória) e você não puder descartar suas alterações e nem alternar entre ramificações (o Git diz que você não tem permissão suficiente); no
Windows
ambiente ashow all hidden files and folders
partir das opções de pasta. Vá para o diretório GIT (deve começar.git
) e exclua o"index.lock"
arquivo. Então o Git deve permitir que você faça o que quiser.fonte
Acabei fazendo um
git stash
seguido de umgit stash clean
para me livrar de alguns. Não encontrou nenhuma configuração automática de cr / lf no arquivo .git / ou ~ / .git.fonte
No meu caso, não pude descartar as alterações relacionadas a um diretório. por exemplo, quando eu executei um diff do git, eu veria isso:
-Subproject commit fdcccccccccccccccccccccccccccccccccccccc +Subproject commit f1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Então eu chamei esse diretório e executei um status git lá. Estava em um estado desconectado HEAD. E então eu apenas corri um
git checkout master
lá. Isso acertou as coisas para mim. Mas isso não é útil para o cenário exato solicitado aqui.fonte
Esta é uma pergunta antiga, mas ainda era relevante para mim. Não encontrei minha resposta até perguntar pelo escritório e descobri que o problema estava nos submódulos. Quando elas são atualizadas, e seu próprio repositório não reflete essas alterações, ele aparece como tendo diferenças, redefinir a cabeça não ajuda. Se for esse o caso, execute:
Isso deve ajudar a consertar as coisas (nesse caso em particular)
fonte
Eu tive um problema de permissões no Windows e tive que fazer
icacls containingFolder /reset /t /l /c
e clique duas vezes na pasta para recuperar minhas permissões.fonte
Eu tinha .gitattributes com o seguinte conteúdo:
* text=auto eol=lf
Para solucionar o problema, edite
.gitattributes
para remover esta linha que relaxa as terminações da linha. Em seguida,git reset --hard HEAD
reverti os arquivos e o.gitattributes
arquivo.fonte
Para mim, esse problema surgiu com a combinação do download de uma imagem Git-LFS que foi carregada via Netlify CMS e servida de maneira diferente pelo manipulador Netlify Large Media.
Minha solução foi comentar / remover essas linhas da minha
~/.gitconfig
para que elas se pareçam abaixo e depois verificandogit status
novamente.OU você provavelmente pode adicionar um filtro mais local através de um
.gitconfig
na raiz de repositório e de alguma forma substituir as regras de filtro para lfs lá.Espero que isso ajude um colega.
fonte
Também enfrentei um problema semelhante e os seguintes passos me ajudaram:
Espero que ajude outras pessoas também.
fonte