Acabei de clonar um repositório git e fazer check-out de um ramo. Eu trabalhei nele e, em seguida, decidi remover todas as minhas alterações locais, pois queria a cópia original.
Em resumo, eu tive que executar os dois comandos a seguir para remover minhas alterações locais
git checkout .
git clean -f
Minha pergunta é,
(1) Essa é a abordagem correta para se livrar das alterações locais, ou então, deixe-me saber a abordagem correta.
(2) quando usamos git reset --hard
como posso redefinir mesmo sem esse comando
obrigado
* Solução: Principais edições: 26/03: * Substituídos muitos termos vagos pela terminologia específica do git [rastreada / não rastreada / encenada / não encenada]
Pode haver apenas três categorias de arquivos quando fazemos alterações locais:
Tipo 1. Arquivos rastreados em estágios
Tipo 2. Arquivos rastreados em estágios
Tipo 3. Arquivos não rastreados em estágios, também conhecidos como arquivos não rastreados
- Preparado - aqueles que são movidos para a área intermediária / adicionados ao índice
- Arquivos modificados rastreados
- Não rastreado - novos arquivos. Sempre sem palco. Se preparado, isso significa que eles são rastreados.
O que cada comando faz:
git checkout .
- Remove SOMENTE arquivos rastreados em estágios [Tipo 2]git clean -f
- Remove somente arquivos não rastreados em estágios [Tipo 3]git reset --hard
- Remove APENAS arquivos rastreados em etapas e não em etapas [Type 1, Type 2]git stash -u
- Remove todas as alterações [Tipo 1, Tipo 2, Tipo 3]
Conclusão:
Está claro que podemos usar
(1) combination of `git clean -f` and `git reset --hard`
OU
(2) `git stash -u`
para alcançar o resultado desejado.
Nota: Esconder, como a palavra significa 'Armazenar (algo) de forma segura e secreta em um local especificado'. Isso sempre pode ser recuperado usando git stash pop
. Portanto, escolher entre as duas opções acima é uma decisão do desenvolvedor.
Obrigado Christoph e Frederik Schøning.
Edição: 27/03
Eu pensei que vale a pena colocar a nota ' cuidado ' paragit clean -f
git clean -f
Não há retorno. Use -n
ou --dry-run
para visualizar o dano que você causará.
Se você também deseja remover diretórios, execute git clean -f -d
Se você deseja apenas remover arquivos ignorados, execute git clean -f -X
Se você deseja remover arquivos ignorados e não ignorados, execute git clean -f -x
reference: more on git clean
: Como remover arquivos locais (não rastreados) da árvore de trabalho atual do Git?
Edição: 20/05/15
Descartando todas as confirmações locais neste ramo [Removendo confirmações locais]
Para descartar todas as confirmações locais nesta ramificação, para tornar a ramificação local idêntica ao "upstream" dessa ramificação, basta executar git reset --hard @{u}
Referência: http://sethrobertson.github.io/GitFixUm/fixup.html
ou faça git reset --hard origin/master
[se a filial local for master
]
Nota: 06/12/2015 Esta não é uma duplicata da outra pergunta SO marcada como duplicada. Esta questão aborda como remover alterações locais do GIT [remover um arquivo adicionado, remover alterações adicionadas ao arquivo existente etc. e as várias abordagens; Onde no outro encadeamento SO aborda apenas como remover a consolidação local. Se você adicionou um arquivo e deseja removê-lo sozinho, o outro encadeamento SO não discute sobre ele. Portanto, este não é um duplicado do outro]
Edição: 23/06/15
Como reverter uma confirmação já enviada para um repositório remoto?
$ git revert ab12cd15
Edição: 01/09/2015
Excluir uma confirmação anterior da filial local e da filial remota
Caso: Você acabou de cometer uma alteração em sua filial local e imediatamente empurrou para a filial remota, de repente percebeu: Oh não! Eu não preciso dessa mudança. Agora faz o que?
git reset --hard HEAD~1
[para excluir essa confirmação da filial local]
git push origin HEAD --force
[ambos os comandos devem ser executados. Para excluir da filial remota]
Qual é o ramo? É o ramo atualmente com check-out.
Editar 09/08/2015 - Remover mesclagem local do git :
Estou no master
ramo e mesclado master
ramo com um ramo recentemente trabalhandophase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
P: Como se livrar dessa mesclagem? Tentei git reset --hard
e git clean -d -f
ambos não funcionaram.
A única coisa que funcionou são as seguintes:
$ git reset --hard origin/master
ou
$ git reset --hard HEAD~8
ou
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code - este é o que estava presente antes que todas as suas confirmações de mesclagem acontecessem]
git stash -a
[ou --all] também esconderá os arquivos ignorados e não rastreados. git clean -x
irá limpar arquivos ignorados também. git clean -X
irá limpar apenas os arquivos ignorados.