Então, adicionei uma pasta ao meu arquivo .gitignore.
Depois de fazer um git status
, me diz
# On branch latest
nothing to commit (working directory clean)
No entanto, quando tento alterar ramificações, obtenho o seguinte:
My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
public/system/images/9/thumb/red-stripe.jpg
public/system/images/9/original/red-stripe.jpg
public/system/images/8/thumb/red-stripe-red.jpg
public/system/images/8/original/red-stripe-red.jpg
public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
public/system/images/7/thumb/red-stripe-dark.jpg
public/system/images/7/original/red-stripe-dark.jpg
public/system/images/7/original/DSC07833.JPG
public/system/images/6/thumb/red-stripe-bw.jpg
public/system/images/6/original/website-logo.png
public/system/images/6/original/red-stripe-bw.jpg
public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
public/system/images/5/original/logocompv-colored-squares-100px.png
public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/4/thumb/DSC_0001.JPG
public/system/images/4/original/logo.png
public/system/images/4/original/DSC_0001.JPG
public/system/images/4/original/2-up.jpg
public/system/images/3/thumb/logo2.gif
public/system/images/3/original/logo2.gif
public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/3/original/11002000962.jpg
public/system/images/2/thumb/Profile Pic.jpg
public/system/images/2/original/Profile Pic.jpg
public/system/images/2/original/02 Login Screen.jpg
public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting
É assim que meu arquivo .gitignore se parece:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Como faço para que isso funcione para que eu possa alternar ramificações sem excluir esses arquivos?
Se eu fizer uma alteração, isso afetará esses arquivos? Em outras palavras, se eu voltasse a esse ramo mais tarde, tudo seria perfeito até o meu último commit?
Não quero perder esses arquivos, apenas não os quero rastreados.
Respostas:
Parece que você deseja que os arquivos sejam ignorados, mas eles já foram confirmados. .gitignore não tem efeito nos arquivos que já estão no repositório, portanto eles precisam ser removidos com
git rm --cached
. O--cached
vai impedi-lo de ter qualquer efeito sobre a sua cópia de trabalho e ele vai marcar como removido na próxima vez que cometer. Após a remoção dos arquivos do repositório, o .gitignore impedirá que sejam adicionados novamente.Mas você tem outro problema com o seu .gitignore, está usando excessivamente curingas e isso faz com que ele corresponda menos do que o esperado. Em vez disso, vamos alterar o .gitignore e tentar isso.
fonte
git rm --cached
não fará diferença, esses arquivos não existem na ramificação atual. Para esse erro, acho que o usuário precisa seguir a resposta de @Greg Hewgill - "mova-o para fora da cópia de trabalho, troque de ramificação e mova-o para trás".your files would be overwritten
comfatal: pathspec 'test/node_modules' did not match any files
quando eu façogit rm -r --cache test/node_modules
? Eu não posso puxar por causa da mensagem sobreposta e não pode remover, porque git não pode encontrá-los (eles estão lá)AVISO: ele excluirá arquivos não rastreados, portanto, não é uma ótima resposta para a pergunta que está sendo feita.
Eu bati nessa mensagem também. No meu caso, eu não queria manter os arquivos, então isso funcionou para mim:
git 2.11 e mais recente
idiota mais velho
Se você também deseja remover arquivos ignorados pelo git, execute o seguinte comando.
ESTEJA AVISADO!!! Isso provavelmente destrói o seu projeto, use apenas se você souber 100% do que está fazendo
git 2.11 e mais recente
idiota mais velho
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
significa que arquivos ignorados também são removidos e arquivos desconhecidos pelo git.-d
significa remover diretórios não rastreados, além de arquivos não rastreados.-f
é necessário para forçá-lo a executar.fonte
git clean -dfxn
ougit clean -dfx --dry-run
-x
opção de me dóiApenas force:
git checkout -f another-branch
fonte
error: pathspec 'mybranch' did not match any file(s) known to git.
Se você estiver no OS X, pode ser porque o nome de um arquivo teve certos caracteres que mudam de caso. Tente definir a seguinte opção de configuração:
fonte
git rebase
também. Obrigado.O Git está lhe dizendo que deseja criar arquivos (nomeados
public/system/images/9/...
etc), mas você já possui arquivos existentes nesse diretório que não são rastreados pelo Git. Talvez alguém tenha adicionado esses arquivos ao repositório Git, e esta é a primeira vez que você muda para esse ramo?Provavelmente, existe um motivo para esses arquivos em sua
develop
ramificação, mas não em sua ramificação atual. Você pode ter que perguntar a seus colaboradores por que isso acontece.Você não pode fazer isso sem fazer com que os arquivos desapareçam de alguma forma. Você pode renomear
public
paramy_public
ou algo assim por enquanto.Se você confirmar suas alterações, o Git não as perderá. Se você não confirmar suas alterações, o Git tentará realmente não substituir o trabalho que você fez. É sobre isso que o Git está avisando em primeira instância aqui (quando você tentou alternar ramificações).
fonte
Isso funcionou para mim.
fonte
Existe um comando para esta tarefa delicada (excluir permanentemente arquivos não rastreados)
Então
git pull
vai fazer.fonte
Para aqueles que precisam de algo menos abrangente do que a resposta de Scott Schafer ,
provavelmente funcionará. I altamente sugerir executando
primeiro. Esse comando produzirá uma lista de arquivos que o Git removerá se você executar
git clean -f
, e poderá economizar o esforço de remover inadvertidamente algo que você não deseja.Consulte esta resposta do Stack Oveflow ou os documentos para obter mais informações
git clean
.fonte
Infelizmente nem
git rm --cached
ougit clean -d -fx ""
fez isso por mim.Minha solução acabou sendo levar minha ramificação para controle remoto, clonando um novo repositório e fazendo a mesclagem no novo repositório. Outras pessoas que acessaram o repositório tiveram que fazer o mesmo.
Moral da história: use um
.gitignore
arquivo desde o início.fonte
Se você deseja resolver rapidamente esta questão, pode usar este comando:
fonte
.gitignore
afaik.Eu tive o mesmo problema ao fazer check-out de uma ramificação com base em uma confirmação anterior. O Git recusou o check-out por causa de arquivos não rastreados.
Encontrei uma solução e espero que também o ajude.
Adicionar os diretórios afetados
.gitignore
e emitir$ git rm -r --cached
neles aparentemente não é suficiente.Suponha que você queira criar uma ramificação baseada em um commit anterior K para testar algumas coisas e voltar à versão atual. Eu faria isso nas seguintes etapas:
Configure os arquivos não rastreados: edite
.gitignore
e aplique$ git rm -r --cached
nos arquivos e diretórios que você deseja que o git ignore. Adicione também o.gitignore
próprio arquivo.gitignore
e não esqueça de emitir$ git rm -r --cached .gitignore
. Isso garantirá que o comportamento ignorar do git deixe o mesmo nos commits anteriores.Confirme as alterações que você acabou de fazer:
$ git add -A
$ git commit
Salve o log atual, caso contrário, poderá haver problemas para voltar à versão atual
$ git log > ../git.log
Reinicialização total para o commit K
$ git reset --hard version_k
Crie uma ramificação baseada no commit K
$ git branch commit_k_branch
Fazer check-out nesse ramo
$ git checkout commit_k_branch
Faça suas coisas e cometa
Checkout de volta ao master novamente
$ git checkout master
Redefinir para a versão atual novamente
$ git reset current_version
ou$ git reset ORIG_HEAD
Agora você pode redefinir com força o HEAD
git reset --hard HEAD
NOTA! Não pule a penúltima etapa (como por exemplo
$ git reset --hard ORIG_HEAD
), caso contrário, os arquivos não rastreados que o git se queixou acima serão perdidos.Também verifiquei se os arquivos que o git se queixava não eram excluídos. Copiei-os para um arquivo de texto e emiti o comando
$ for i in $(cat ../test.txt); do ls -ahl $i; done
Se você fizer o checkout da filial mencionada acima novamente, não se esqueça de emitir
$ git status
para garantir que nenhuma alteração indesejada apareça.fonte
Isso aconteceu comigo em um sistema Windows 8 , usando o Git no prompt de comando. O resto da minha equipe usa o TFS , e eu uso o git-tf da Microsoft para enviar / receber entre o TFS e meu repositório Git local.
O problema surgiu devido a alguns arquivos que foram renomeados apenas para mudar de caso . O que parece ter acontecido foi o seguinte:
git status
, usando , não pude ver nenhuma alteração, pois no prompt de comando do Windows esses nomes de arquivo são equivalentes.A solução mais simples para mim foi:
git checkout
uma versão anterior do projeto, muito antes de esses arquivos serem adicionados .git checkout
a versão mais recente do projeto, com a caixa de arquivo correta.fonte
Essas duas funções (git rm --cached, git checkout -f another-branch) NÃO funcionaram para mim.
Em vez disso, eu removi fisicamente o arquivo (no eclipse) como o que o Git diz para você fazer; Mova ou remova-os antes de poder trocar de ramificação.
e então adiciono / comprometi.
e então eu puxei e funcionou!
fonte
No meu caso, o problema estava com os submódulos.
master
foi mesclado com outro ramo que adicionou um novo submódulo ao projeto. O ramo que eu estava tentando fazer check-out não tinha, por isso o git estava reclamando de arquivos não rastreados e nenhuma das outras soluções sugeridas funcionou para mim. Forcei o checkout para minha nova filial e puxei o mestre.git checkout -f my_branch
git pull origin master
git submodule update --init
fonte
No meu caso
git rm --cached
não funcionou. Mas eu entendi com umgit rebase
fonte
Eu também estava enfrentando um problema semelhante e tentei todas as soluções postadas acima, mas não funcionou
O problema foi causado quando eu mudei o nome
onMusicUpdateListener.java
paraOnMusicUpdateListener.java
nodevelop
ramo.Agora
master
tinhaonMusicUpdateListener.java
edevelop
tinha o mesmo arquivo queOnMusicUpdateListener.java
Agora, sempre que eu mudei para mestre, isso me dava um erro
e então
aborted
.Para resolver isso, forço
checked out
master
ramificadamente e renomei meu nomeonMusicUpdateListener.java
paraOnMusicUpdateListener.java
,committed
it e entãomerged
comdevelop
branch.Então atualizei meu
develop
ramo pormerging
elemaster
e agora tudo voltou ao normal e o problema foi resolvido.fonte
Isso pode ser um problema de permissão,
mude a propriedade,
fonte
2 arquivos com o mesmo nome, mas caso diferente pode ser o problema.
Você pode excluir um desses arquivos ou renomeá-lo. Ex:
fonte
Mover arquivos, em vez de excluir
Uma maneira de evitar a exclusão de arquivos é movê-los. Por exemplo:
fonte
Se você renomeou um arquivo localmente e, em seguida, execute a
pull
, ele exibirá essa mensagem de erro.fonte
fácil de resolver, o git está dizendo que você tem os mesmos arquivos nos dois ramos; portanto, você deve excluir os arquivos específicos do ramo mestre e poderá mesclar:
git mesclar "sua filial"
Espero que funcione para você, acabei de resolver meu erro. meu erro foi:
erro: Os seguintes arquivos da árvore de trabalho não rastreados seriam substituídos por mesclagem: .vs / slnx.sqlite Mova ou remova-os antes de mesclar. Interrompendo
Agora está funcionando! No meu caso .vs / slnx.sqlite foi gerado pelo visual studio, eu precisava fechá-lo antes de excluí-lo.
fonte
No meu caso, eu estava vendo esse erro porque estava usando um CMS de código aberto popular e o diretório que estava causando problemas era o diretório de uploads no qual o CMS grava.
Então, o que estava dizendo é que existem arquivos que você não possui, mas que não pode ser obtido com o controle de versão.
Estou pegando todos os arquivos do site ativo para o meu local, depois verifico isso no repositório, na esperança de que isso resolva o problema.
fonte
Exclua o arquivo .gitignore do appname / gen / para resolver esse problema.
fonte
Eu apenas fui ao sistema de arquivos e excluí o arquivo diretamente, depois continuei com o git checkout e funcionou.
Eu já tive o problema várias vezes e pode estar relacionado a desenvolvedores que excluem, pressionam, adicionam novamente, pressionam ou algo do tipo.
fonte
A maioria das respostas considera excluir ou remover os arquivos, que é a maneira mais fácil. Mas às vezes você não quer se livrar dos arquivos locais. Mas junte-se a uma estratégia, para que o git também tenha uma solução para isso;
fonte
Basta excluir os arquivos ou renomeá-los.
por exemplo
Eu tive que renomear / excluir ajax / product.php e ajax / produtoPrice.php .
Não se preocupe, o git pull os trará de volta. Sugiro que você os renomeie em vez de excluí-los, pois poderá perder algumas alterações.
Se isso não ajudar, é necessário excluir todo o ramo e criá-lo novamente.
git pull origin remotebranch
fonte
Para salvar os arquivos modificados e usar o conteúdo modificado posteriormente. Encontrei esse erro enquanto tento verificar uma ramificação e ao tentar fazer uma nova recuperação. Experimente o Git stash
git stash
fonte
Verifique se algum nome de pasta com '/' ou qualquer símbolo especial, renomeie essas pastas. Então você apenas clona o repositório para outro local.
fonte
Uma solução simples pode ser: Apenas verifique se você está no diretório de trabalho correto em
GitBash
. Essa mensagem ocorre quase sempre, se um usuário tentar mesclar um diretório muito alto na hierarquia de pastas.Exemplo:
Cenário: O repositório clonado pelo usuário
git-folder
criou um novo projeto Java no Eclipse, importou o repositório clonado. O Eclipse definiu myProjectSourceFolder como Pasta de Origem em seu Projeto local. portanto, o usuário entrou no git bash e pressionou, puxou e comprometeu seu projeto a partir daí. Portanto, o git sincronizamyProjectSourceFolder
- mas não possui registro em seu histórico para myBashSourceFolder. Portanto, um push / pull / merge de myBashSourceFolder produzirá a saída especificada, se o Usuário tentar sincronizar a partir da próxima vez, em vez da pasta em que ele trabalhou anteriormente.fonte