Eu me comprometo com um repositório git pela primeira vez; Lamento o commit e quero revertê-lo. eu tento
# git reset --hard HEAD~1
Recebo esta mensagem:
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
Esta confirmação é a primeira confirmação do repositório. Alguma idéia de como desfazer o commit inicial do git?
git status
, para minha surpresa, git dissefatal: Not a git repository (or any parent up to mount point ...)
!.gitignore
.git add .
,git commit -m "initial commit"
,git update-ref -D HEAD
, Crie um.gitignore
, aviso de que git ainda está vendo os arquivos adicionados anteriormente que deve ignorado. Em outras palavrasgit update-ref -d HEAD
, não me levou de volta ao estado antes do commit inicial.git reset --hard HEAD~1
removeria os arquivos adicionados para todas as outras confirmações. Claramente, a questão é como chegar ao mesmo estado em que esse comando funciona em todos os outros casos. Veja esta lista para provar que sua solução não funciona gist.github.com/greggman/522fa69a21d6cfb3ff0bgit update-ref -d HEAD
se realmente reverter o commit inicial, mas mantém todas as alterações anteriormente cometidos adicionadas ao índice. Se você também deseja remover essas alterações, basta executar uma sequênciagit reset --hard
. Mesmo que incompleta, essa resposta é realmente a melhor, então evite usá-larm -fr .git
(a menos que você saiba o que está fazendo).Você pode excluir o HEAD e restaurar seu repositório para um novo estado, onde é possível criar um novo commit inicial:
Depois de criar um novo commit, se você já tiver enviado por push para remoto, será necessário forçá-lo ao remoto para substituir o commit inicial anterior:
fonte
Esta pergunta foi vinculada a este post do blog e uma solução alternativa foi proposta para as versões mais recentes do Git:
Esta solução assume que:
master
filialold_master
então estou livre para usar esse nomeEle renomeará o ramo existente
old_master
e criará um novo ramo órfãomaster
(como é criado para novos repositórios), após o qual você pode excluir livrementeold_master
... ou não. Você decide.Nota: Mover ou copiar uma ramificação git preserva seu reflog (consulte este código ) ao excluir e, em seguida, criar uma nova ramificação a destrói. Como você deseja voltar ao estado original sem histórico, provavelmente deseja excluir a ramificação, mas outras pessoas podem considerar esta pequena nota.
fonte
Nas condições estipuladas na pergunta:
git init
,git add
operações,git commit
,Se essas pré-condições forem atendidas, a maneira mais simples de desfazer o commit inicial seria:
do diretório em que você fez
git init
. Você pode refazer o procedimentogit init
para recriar o repositório Git e refazer as adições com quaisquer alterações que você se arrepende de não ter feito na primeira vez e refazer o commit inicial.PERIGO! Isso remove o diretório do repositório Git.
Ele remove o diretório do repositório Git de forma permanente e irrecuperável, a menos que você tenha backups em algum lugar. Sob as pré-condições, você não tem nada que queira manter no repositório, para não perder nada. Todos os arquivos que você adicionou ainda estão disponíveis nos diretórios de trabalho, supondo que você ainda não os modificou e não os excluiu etc. No entanto, fazer isso é seguro apenas se você não tiver mais nada no seu repositório. Sob as circunstâncias descritas na pergunta 'confirmar o repositório pela primeira vez - e depois se arrepender', é seguro. Muitas vezes, porém, não é seguro.
Também é seguro fazer isso para remover um repositório clonado indesejado; não causa danos ao repositório do qual foi clonado. Ele descarta tudo o que você fez em sua cópia, mas não afeta o repositório original.
Tenha cuidado, mas é seguro e eficaz quando as pré-condições são atendidas.
Se você fez outras coisas com seu repositório que deseja preservar, essa não é a técnica apropriada - seu repositório não atende mais às condições prévias para que isso seja apropriado.
fonte
Você não pode. Assim:
fonte
git reset --hard
, então por que ele fariagit add -A
?Vou jogar o que funcionou para mim no final. Eu precisava remover a confirmação inicial em um repositório, pois os dados em quarentena haviam sido extraviados, a confirmação já havia sido enviada.
Verifique se você está atualmente no ramo direito.
git checkout master
git update-ref -d HEAD
git commit -m "Initial commit
git push -u origin master
Isso foi capaz de resolver o problema.
Importante
Este estava em um repositório interno que não estava acessível ao público; se o seu repositório estava acessível ao público, assuma que qualquer coisa que você precise reverter já foi puxada por outra pessoa.
fonte
Eu me pergunto por que "corrigir" não é sugerido e foi riscado por @damkrat, pois a alteração me parece a maneira certa de resolver da maneira mais eficiente o problema subjacente de corrigir a confirmação incorreta, pois não há o propósito de não ter nenhuma inicial. confirmar. Como alguns enfatizaram, você só deve modificar o ramo "público" como mestre, se ninguém clonar seu repositório ...
fonte
git reset --hard faça alterações, então façaou
e depois
--force reescreverá o commit que você redefiniu na primeira etapa.Não faça isso, porque você está prestes a ir contra toda a idéia dos sistemas VCS e do git em particular. O único bom método é criar novos e excluir ramificações desnecessárias. Veja
git help branch
para informações.fonte
Tudo o que você precisa fazer é reverter o commit.
Então empurre
fonte