Como descarto alterações não estáveis ​​no Git?

4819

Como descarto alterações na minha cópia de trabalho que não estão no índice?

Somente leitura
fonte
9
git-cleansó remove arquivos untracked da árvore de trabalho git-scm.com/docs/git-clean
Yega
24
Para esclarecer o comentário de Asenar acima, git-clean -dfpode ser perigoso. Ele excluirá os arquivos não rastreados locais (por exemplo, cobertos por um .gitignore) Leia tudo abaixo com atenção e considere o git checkout. em vez
jacanterbury
15
'git clean -df' Esteja avisado! Eu tentei isso e perdi as principais pastas que não podem ser restauradas ... Ai!
Gabe Karkanis 27/10
46
bater git statusdá uma sugestão de como fazer isso! git checkout -- .
Paulo
4
@Paulo: a partir de julho 2019, git statusdá a sugestão: git restore. git restoreé um novo comando exatamente para esse fim. Veja minha atualização de 2019 .
prosoitos 12/09/19

Respostas:

2685

Outra maneira mais rápida é:

git stash save --keep-index --include-untracked

Você não precisa incluir --include-untrackedse não quiser ser completo.

Depois disso, você pode soltar esse esconderijo com um git stash dropcomando, se quiser.

Greg Hewgill
fonte
122
E para ser completo, você também gostaria --include-untracked.
TJ Crowder
9
@KarimSamir: A pergunta pergunta especificamente sobre alterações que não estão no índice . O git resetcomando também descartará as alterações no índice.
precisa saber é o seguinte
146
git checkout -. é muito mais rápido
Frank
38
Nem a git stash, nem qualquer variedade de git checkoutdescartará exclusões sem etapas. De acordo com a saída de git status, a resposta correta real aqui é algum saborgit reset HEAD
Chris Warth
127
Isso polui a pilha de stash. git checkout -- .faz o trabalho com apenas um comando.
Felipe Tonello
5339

Para todos os arquivos não faseados no diretório de trabalho atual, use:

git checkout -- .

Para um arquivo específico, use:

git checkout -- path/to/file/to/revert

--aqui para remover a ambiguidade do argumento .

Tobi
fonte
117
Este parece ser o caminho canônico do git. isto é exatamente o que git lhe diz para fazer se você digitargit status
ABMagil
27
Não funciona se houver arquivos não rastreados. Diz Git error: The following untracked working tree files would be overwritten by checkout: ....
Michael Iles
92
pergunta para iniciantes, o que significa "git checkout -." significa semanticamente?
kaid
120
@Ninjack git checkout -- .significa a mesma coisa que git checkout ., exceto que você é explícito sobre o fato de não especificar o nome do ramo. Ambos dizem fazer checkout da versão HEAD no ramo em que estou atualmente '.' ou './'. Se você faz isso git checkout branch-name directory-or-file-nameem geral, você obtém a versão HEAD do directory-or-file-nameon branch branch-name.
akgill
23
IMO, essa variante é imperfeita, pois não lida com situações em que o repositório alterado não está na revisão HEAD no momento da limpeza das alterações e você NÃO deseja atualizá-lo para HEAD e deseja apenas limpar as alterações.
precisa saber é o seguinte
1899

Parece que a solução completa é:

git clean -df
git checkout -- .

git cleanremove todos os arquivos não rastreados ( aviso : embora não exclua os arquivos ignorados mencionados diretamente em .gitignore, ele pode excluir os arquivos ignorados que residem nas pastas ) e git checkoutlimpa todas as alterações não faseadas.

Mariusz Nowak
fonte
116
As outras duas respostas realmente não funcionam, esta funcionou.
John Hunt #
18
@dval é porque o primeiro comando removeu os arquivos não indexados e o segundo removeu as alterações não faseadas (dos arquivos indexados). Então, se você não tem qualquer encenado mudanças este é o mesmo que reverter para a última confirmação comgit reset --hard
Amanuel Nega
3
use -dff se o diretório não rastreado for um clone do git.
accuya
87
Cuidado ao executar o git clean -df. Se você não entender o que faz, você pode ser a exclusão de arquivos que você quer dizer para manter, como robots.txt, arquivos enviados, etc.
ctlockey
40
Como @ctlockey disse, o primeiro comando também diretórios de exclusão se eles são compostos de arquivos ignorados única ... Perdeu um monte de arquivos de configuração no meu projeto :( Tenha cuidado.
Maxime Lorant
326

Isso verifica o índice atual do diretório atual, descartando todas as alterações nos arquivos do diretório atual para baixo.

git checkout .

ou isso que verifica todos os arquivos do índice, substituindo os arquivos da árvore de trabalho.

git checkout-index -a -f
CB Bailey
fonte
28
Olá, qual é a diferença entre git checkout .e git checkout -- .?
Evan Hu
5
@ Evan: Não há diferença neste caso.
Robert Siemer
10
@ Robert Siemer e no caso geral?
precisa saber é o seguinte
2
@ Evan: lugar ruim para fazer esta pergunta. - Não está relacionado à questão do OP e não está relacionado à resposta aqui.
precisa
14
+1 Esta é a RESPOSTA CERTA, pois lida corretamente com o caso em que alguns arquivos têm alterações em etapas e em etapas. Observe que esta solução descarta as alterações não faseadas; se você deseja mantê-los, use a resposta de @ greg-hewgill de git stash save --keep-index.
Rhubbarb
248
git clean -df

Limpa a árvore de trabalho removendo recursivamente os arquivos que não estão sob controle de versão, iniciando no diretório atual.

-d: Remova diretórios não rastreados, além de arquivos não rastreados

-f: Force (pode não ser necessário, dependendo do clean.requireForce configuração)

Corra git help cleanpara ver o manual

Elvis Ciotti
fonte
por que esta resposta não tem todos os votos? respondeu em 2011 e ainda está correto.
Eugene Braginets
106

Meu favorito é

git checkout -p

Isso permite reverter seletivamente os pedaços.

Veja também:

git add -p
Ben
fonte
9
Adoro a capacidade de ver a mudança real antes que ela seja descartada.
Penghe Geng 03/02
É isso que eu uso. git checkout -p e "a" para aceitar tudo.
achou
2
Eu nunca pensei nisso. Isso -padiciona uma boa camada extra de segurança. Combine com git clean -dpara realmente responder ao OP.
23916 Stephan Henningsen
96

Como nenhuma resposta sugere a combinação exata de opções que eu uso, aqui está:

git clean -dfx
git checkout .

Este é o texto de ajuda on-line para as git cleanopções usadas :

-d

Remova os diretórios não rastreados, além dos arquivos não rastreados. Se um diretório não rastreado for gerenciado por um repositório Git diferente, ele não será removido por padrão. Use a -fopção duas vezes se você realmente deseja remover esse diretório.

-f

Se a variável de configuração Git clean.requireForcenão está definido para false, Git limpo irá se recusar a apagar arquivos ou diretórios a menos que recebam -f, -nou -i. O Git se recusará a excluir diretórios dentro do .gitsubdiretório ou arquivo, a menos que -fseja dado um segundo .

-x

Não use as regras de ignorar de .gitignore(por diretório) e $GIT_DIR/info/exclude, mas ainda use as regras de ignorar fornecidas com as -eopções. Isso permite remover todos os arquivos não rastreados, incluindo produtos de construção. Isso pode ser usado (possivelmente em conjunto com git reset) para criar um diretório de trabalho novo para testar uma compilação limpa.

Além disso, git checkout .precisa ser feito na raiz do repositório.

Martin G
fonte
+1 para esta solução. Em relação à sua observação de que "o git checkout. Precisa ser feito na raiz do repositório", talvez você deva mencionar que podemos apenas fazer isso git reset --hard? (que na verdade é equivalente ao git reset --hard HEADe deve funcionar qualquer que seja o diretório atual ...)
ErikMD
2
Também sobre o primeiro comando git clean -dfx, aqui está uma dica que eu uso para estar no lado seguro antes de executá-lo: apenas execute git clean -d -x -nantes, para exibir a lista de arquivos a serem removidos e confirme a operação executando git clean -d -x -f(coloquei o argumento -n., resp -fno fim de ser capaz de mudá-lo rapidamente em um terminal)
ErikMD
5
Observe rapidamente que isso é irreversível e, se você tiver arquivos .gitignore, os perderá. Portanto, considere fazer o backup do seu projeto antes disso.
Rob
69

Se você deseja apenas remover as alterações nos arquivos existentes , use checkout( documentado aqui ).

git checkout -- .
  • Nenhuma ramificação é especificada e, portanto, faz check-out da ramificação atual.
  • O hífen duplo ( --) informa ao Git que o que segue deve ser considerado como seu segundo argumento (caminho), que você ignorou a especificação de um ramo.
  • O ponto ( .) indica todos os caminhos.

Se você deseja remover os arquivos adicionados desde a sua última confirmação, use clean( documentado aqui ):

git clean -i 
  • A -iopção inicia um interativo clean, para evitar exclusões equivocadas.
  • Um punhado de outras opções estão disponíveis para uma execução mais rápida; veja a documentação.

Se você deseja mover as alterações para um espaço de espera para acesso posterior , use stash( documentado aqui ):

git stash
  • Todas as alterações serão movidas para o Stash do Git, para possível acesso posterior.
  • Um punhado de opções estão disponíveis para esconderijos com mais nuances; veja a documentação.
2540625
fonte
Isso converterá exatamente suas alterações e descartará os arquivos adicionados recentemente da confirmação anterior.
Yohan Chung
votou positivamente na explicação :) #
Archie G. Quiñones
62

Eu realmente achei este artigo útil para explicar quando usar o que comando: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

Existem alguns casos diferentes:

  1. Se você não preparou o arquivo, então você o usa git checkout. O checkout "atualiza os arquivos na árvore de trabalho para corresponder à versão no índice". Se os arquivos não tiverem sido testados (ou seja, adicionados ao índice) ... esse comando reverterá essencialmente os arquivos para o seu último commit.

    git checkout -- foo.txt

  2. Se você preparou o arquivo temporariamente, use git reset. Redefinir altera o índice para corresponder a uma confirmação.

    git reset -- foo.txt

Suspeito que o uso git stashseja uma escolha popular, pois é um pouco menos perigoso. Você sempre pode voltar a ele se acidentalmente explodir demais ao usar o git reset. A redefinição é recursiva por padrão.

Dê uma olhada no artigo acima para obter mais conselhos.

blak3r
fonte
60

A maneira mais fácil de fazer isso é usando este comando:

Este comando é usado para descartar alterações no diretório de trabalho -

git checkout -- .

https://git-scm.com/docs/git-checkout

No comando git, a armazenagem de arquivos não rastreados é obtida usando:

git stash -u

http://git-scm.com/docs/git-stash

AHM Forhadul Islam
fonte
19
Por duas vezes eu vim aqui, leia esta resposta e esqueci .o final. Para o futuro: o período é essencial !
bejado
2
Eu precisava me livrar de todas as alterações locais em um subdiretório, sem perder todas as outras alterações. Esta resposta ajudou muito, graças
Ally
2
Por favor, descreva o que os dois comandos fazem. É realmente inútil não ter explicação.
Chris Kennedy
2
excelente. o checkout faz em um comando o que o mais popular faz em dois. também pode ser seguido git clean -fdpara limpar arquivos que não estão no índice.
Oligofren #
49

Se você não está interessado em manter as alterações não organizadas (especialmente se as alterações organizadas são novos arquivos), achei útil:

git diff | git apply --reverse
Joshua Kunzmann
fonte
44

git checkout -f


man git-checkout:

-f, --force

Ao alternar ramificações, continue mesmo se o índice ou a árvore de trabalho diferirem de HEAD. Isso é usado para jogar fora as alterações locais.

Ao fazer o check-out de caminhos do índice, não falhe nas entradas não imersas; em vez disso, entradas não mescladas são ignoradas.

Bijan
fonte
2
Isso descartaria alterações no índice !! (E o OP exige para deixá-los como é.)
Robert Siemer
44

Conforme você digita o status do git, (use "git checkout - ..." para descartar as alterações no diretório de trabalho) é mostrado.

por exemplo git checkout -- .

Erdem ÖZDEMİR
fonte
1
Votado porque não ajuda a descartar rapidamente todos os arquivos. Os três pontos indicam que você precisa listar todos os arquivos. Isso é especialmente ruim se você precisar descartar toneladas de arquivos de uma só vez, por exemplo. durante uma grande mesclagem depois de realizar todas as modificações que você deseja manter
usr-local-
2
Obviamente, o comando correto é "git checkout -." um único ponto. No comentário, os três pontos eram uma coisa gramatical, para indicar que há muitas outras opções que poderiam ter sido usados ..
Josef.B
39

Você pode usar o git stash - se algo der errado, você ainda poderá reverter a partir do stash. Semelhante a alguma outra resposta aqui, mas esta também remove todos os arquivos não faseados e também todas as exclusões não faseadas:

git add .
git stash

se você verificar se está tudo bem, jogue fora o esconderijo:

git stash drop

A resposta de Bilal Maqsood com git cleantambém funcionou para mim, mas com o esconderijo eu tenho mais controle - se eu o fizer acidentalmente, ainda posso recuperar minhas alterações

ATUALIZAR

Acho que há mais uma alteração (não sei por que isso funcionou para mim antes):

git add . -A ao invés de git add .

sem os -Aarquivos removidos não serão testados

Asped
fonte
39

Atualização de 2019:

Desde julho 2019 , houve um novo comando que faz exatamente isso: git restore.

Em git status, agora Git recomenda usar este comando em vez de git checkoutcomo ele costumava fazer.

Embora esse comando também possa ser usado para restaurar a árvore de trabalho para uma confirmação específica ou para restaurar o conteúdo do índice, por padrão, a árvore de trabalho é restaurada para o estado no índice (o que é solicitado aqui).

Portanto, para restaurar os arquivos que correspondem a um pathspec (se livrando de suas alterações não estágios), você deve:

git restore <pathspec>

Por exemplo, para restaurar todas as alterações não faseadas no diretório atual, você pode executar:

git restore .

Se você executar isso a partir da raiz do projeto, ele restaurará todas as alterações não-estágios em todo o repositório.

Observe que, como em git checkout -- .(como indicado por Mariusz Nowak), isso descartará apenas as alterações nos arquivos rastreados pelo Git e não descartará nenhum novo arquivo não rastreado. Se você deseja descartar as alterações não faseadas, incluindo novos arquivos não rastreados, poderá executar um adicional:

git clean -df

No entanto, tenha muito cuidado com este comando posterior, pois você pode descartar arquivos dos quais não pretendia se livrar.


Nota sobre git restore: como este é um novo comando, sua página de manual emite um aviso:

Este comando é experimental. O comportamento pode mudar.

Portanto, é possível que essa resposta fique desatualizada se o comportamento mudar no futuro. Portanto, pode ser aconselhável executar um rápido man git-restoreantes de usá-lo.

prosoitos
fonte
2
Eu queria reverter minhas alterações sem estágio apenas sem afetar os arquivos adicionados recentemente, para que git restore .funcionasse perfeitamente. Obrigado.
Saurabh Misra
3
Eu fiz git restore <filename>e funcionou perfeitamente.
Merlin
1
Funcionou bem para mim.
Prometheus
1
De acordo com a página de manual, git restore .restaura todos os arquivos no diretório atual, não em todo o repositório.
jarno
1
Você está certo. Obrigado! Acabei de testar e, de fato, é esse o caso. É, no entanto, recursivo. Portanto, quando executado a partir da raiz do projeto, ele se aplica a todo o repositório. Vou editar minha resposta.
prosoitos
35

Em vez de descartar as alterações, redefino o controle remoto para a origem. Nota - este método é restaurar completamente sua pasta para a pasta do repositório.

Então, faço isso para garantir que eles não fiquem lá quando eu reiniciar o git (mais tarde - exclui gitignores no Origin / branchname)

NOTA: Se você deseja manter os arquivos ainda não rastreados, mas não em GITIGNORE, pode pular esta etapa, pois limpará esses arquivos não rastreados não encontrados no repositório remoto (obrigado @XtrmJosh).

git add --all

Então eu

git fetch --all

Então eu redefinir para origem

git reset --hard origin/branchname

Isso colocará de volta à estaca zero. Assim como a re-clonagem da ramificação, mantendo todos os meus arquivos marcados com local e localmente.

Atualizado por comentário do usuário abaixo: Variação para redefinir o para qualquer ramo atual em que o usuário esteja.

git reset --hard @{u}
usuario
fonte
Essa é a minha opção preferida, mas por que você adiciona todas as alterações primeiro? Pelo que sei, isso apenas modifica a lista de diretórios nos arquivos Git, enquanto estiver usando git reset --hard, isso será perdido de qualquer maneira enquanto os diretórios ainda serão removidos.
precisa saber é o seguinte
Eu não uso no mac ou linux, o github windows powershell às vezes deixa os arquivos lá após a redefinição. Eu acho que é porque o git reset define todos os arquivos no repositório para o seu estado original. Se eles não forem adicionados, eles não serão tocados. O cliente de desktop, em seguida, vai pegar a "hey este arquivo é aqui e precisa ser cometido"
Nick
Sentido feito. Eu não uso o Windows, por isso não vi esse problema (não usei o Windows nos últimos meses, pelo menos, não me lembro de muito antes disso - é um enorme borrão lamentável). Pode ser interessante notar a lógica em sua resposta principal :)
XtrmJosh
Também deparei com esse problema em um Mac agora. Se o arquivo não for rastreado no Repo, algumas vezes o git reset não o toca. Eu realmente não pode isolar o "porquê", mas quando isso acontece, se eu reiniciar, e eu ainda tenho um arquivo não confirmadas ou dois, eu adicionar --all e redefinir --hard novamente
Nick
2
Uma variação agradável pouco desta que eu gosto é git reset --hard @{u}que redefine o ramo para onde o ramo de rastreamento remoto atual é
user2221343
31

Tentei todas as soluções acima, mas ainda não conseguia se livrar de arquivos novos e sem etapas.

Use git clean -fpara remover esses novos arquivos - com cuidado! Observe a opção de força.

artur
fonte
21

simplesmente diga

git stash

Ele removerá todas as suas alterações locais. Você também pode usar mais tarde dizendo

git stash apply 

ou git stash pop

piyushmandovra
fonte
21

Apenas use:

git stash -u

Feito. Fácil.

Se você realmente se importa com sua pilha de stash, pode seguir com git stash drop. Mas, nesse ponto, é melhor usar (de Mariusz Nowak):

git checkout -- .
git clean -df

No entanto, eu gosto git stash -umais porque ele "descarta" todas as alterações rastreadas e não rastreadas em apenas um comando . No entanto, git checkout -- .única devoluções alterações controladas e git clean -dfmudanças só devoluções untracked ... e digitando os dois comandos é muito muito trabalho :)

Ben Wilde
fonte
Nota: git stash -uem breve (Git 2.14.x / 2.15, terceiro trimestre de 2017) evoluirá um pouco: stackoverflow.com/a/46027357/6309
VonC
Se eu receber a pergunta do OP correto, os arquivos indexados devem ser mantidos. Somente as mudanças que estão no palco devem ser removidas. Então, deve estar git stash -kna minha opinião.
snap
21

Para fazer um descarte permanente: git reset --hard

Para salvar as alterações para mais tarde: git stash

SANGEETHA PH
fonte
16

Isso funciona mesmo em diretórios que são; fora das permissões normais do git.

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

Aconteceu comigo recentemente

GlassGhost
fonte
Cuidado, porém, que o conteúdo ignorado pelo git não reterá suas permissões originais! Portanto, pode causar um risco à segurança.
twicejr
@twicejr Você está errado, leia git help clean"-d Remover diretórios não rastreados, além de arquivos não rastreados".
GlassGhost
Por que você configurou todos os seus arquivos para serem de leitura / gravação mundial? Não é uma boa prática.
Ghoti
@ Ghoti meu mal, 664 está correto? você também pode editar a resposta.
GlassGhost
Definir todas as permissões para 664 faz muitas suposições sobre que tipo de permissões o projeto precisa. Eu acho que usar essa parte do comando causará problemas para algumas pessoas.
ianrandmckenzie
15

você tem um comando git muito simples git checkout .

khem raj regmi
fonte
14
cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory
vivekporwal04
fonte
12

Na minha opinião,

git clean -df

deve fazer o truque. Conforme documentação do Git no git clean

git-clean - Remove arquivos não rastreados da árvore de trabalho

Descrição

Limpa a árvore de trabalho removendo recursivamente os arquivos que não estão sob controle de versão, iniciando no diretório atual.

Normalmente, apenas os arquivos desconhecidos pelo Git são removidos, mas se a opção -x for especificada, os arquivos ignorados também serão removidos. Por exemplo, isso pode ser útil para remover todos os produtos de construção.

Se algum argumento ... opcional for fornecido, apenas esses caminhos serão afetados.

Opções

-d Remova os diretórios não rastreados, além dos arquivos não rastreados. Se um diretório não rastreado for gerenciado por um repositório Git diferente, ele não será removido por padrão. Use a opção -f duas vezes se você realmente deseja remover esse diretório.

-f --force Se a variável de configuração Git clean.requireForce não estiver definida como false, o git clean se recusará a executar, a menos que seja fornecido -f, -n ou -i.

Lahiru
fonte
11

Independentemente do estado do seu repo, você sempre pode redefinir para qualquer confirmação anterior:

git reset --hard <commit hash>

Isso descartará todas as alterações feitas após a confirmação.

msangel
fonte
2
Isso também descartará tudo no índice (não apenas coisas que não estão no índice), que está além do que o OP está solicitando.
Linus Arver
10

Outra maneira de se livrar de novos arquivos mais específicos do que o git clean -df (isso permitirá que você se livre de alguns arquivos, não necessariamente de todos), é adicionar os novos arquivos ao índice primeiro, depois esconder e soltar o botão esconderijo.

Essa técnica é útil quando, por algum motivo, você não pode excluir facilmente todos os arquivos não rastreados por algum mecanismo comum (como rm).

tjb
fonte
9

O que se segue é realmente apenas uma solução se você estiver trabalhando com uma bifurcação de um repositório onde você sincroniza regularmente (por exemplo, solicitação de recebimento) com outro repositório. Resposta curta: exclua fork e refork, mas leia os avisos no github .

Eu tive um problema semelhante, talvez não idêntico, e lamento dizer que minha solução não é ideal, mas é, em última análise, eficaz.

Eu geralmente teria mensagens de status do git como esta (envolvendo pelo menos 2/4 arquivos):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

Um olho atento notará que esses arquivos têm dopplegangers que são uma única letra no caso de desligamento. De alguma forma, e não tenho idéia do que me levou a seguir esse caminho (como eu não estava trabalhando com esses arquivos no repositório upstream), eu havia trocado esses arquivos. Experimente as muitas soluções listadas nesta página (e em outras páginas) que parecem não ajudar.

Consegui resolver o problema excluindo meu repositório bifurcado e todos os repositórios locais e reforçando. Isso por si só não foi suficiente; o upstream teve que renomear os arquivos em questão para novos nomes de arquivos. Contanto que você não tenha nenhum trabalho não solicitado, wikis e problemas que divergem do repositório upstream, você deve estar bem. O rio acima pode não estar muito feliz com você, para dizer o mínimo. Quanto ao meu problema, é sem dúvida um erro do usuário, pois não sou tão proficiente com o git, mas o fato de estar longe de ser fácil corrigir pontos de um problema com o git também.

bbarker
fonte
7

Quando você deseja transferir um estoque para outra pessoa:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

[editar] como comentado, é possível nomear esconderijos. Bem, use isso se você quiser compartilhar seu estoque;)

twicejr
fonte
5
Na verdade, o Git stash pode ter um título. Por exemplo git stash save "Feature X work in progress".
Colin D Bennett
7

Você pode criar seu próprio apelido, que descreve como fazê-lo de maneira descritiva.

Eu uso o próximo alias para descartar as alterações.


Descartar alterações em um (lista de) arquivos na árvore de trabalho

discard = checkout --

Em seguida, você pode usá-lo como o próximo para descartar todas as alterações:

discard .

Ou apenas um arquivo:

discard filename

Caso contrário, se você quiser descartar todas as alterações e também os arquivos não rastreados, utilizo uma combinação de checkout e clean:

Limpar e descartar alterações e arquivos não rastreados na árvore de trabalho

cleanout = !git clean -df && git checkout -- .

Portanto, o uso é simples como a seguir:

cleanout

Agora está disponível no próximo repositório do Github, que contém muitos aliases:

Pau
fonte
7

Eu tive uma situação estranha em que um arquivo está sempre sem estágio, isso me ajuda a resolver.

git rm .gitattributes
git add -A
git reset --hard

SDV
fonte