Perdi todas as minhas modificações faseadas, mas não confirmadas, após o comando git revert --abort
Eu acho que eu errei totalmente.
Estou trabalhando em um projeto há 2 dias e estava tentando o Magit no emacs confirmar o projeto, mas continuava voltando à área de preparação sem concluir a confirmação.
Para encurtar a história, saí do emacs e estava de volta à linha de comando e estava tudo bem com os arquivos, masgit status
disse que eu deveria fazer umagit revert --abort
ou alguma outra opção que não me lembro agora.
Bem,git revert --abort
parecia bom, já que eu queria abortar o que o git estava fazendo e ficar com meus arquivos, mas na verdade levou todos os meus arquivos para a última confirmação.
Perdi horas e horas de trabalho. Existe alguma maneira de voltar ao estado antes que este comando tenha sido emitido?
Meu reflit git é:
5fba267 HEAD@{0}: commit: Clones the spacemacs repo needed for emacs
2c9ced3 HEAD@{1}: commit: Major changes to emacs configuration
d38f9db HEAD@{2}: commit: add initial emacs configuration and vimwiki
e0e28d0 HEAD@{3}: commit: Vim whitespace showing modifications
O trabalho que fiz foi depois disso 5fba267 HEAD @ {0}
EDITAR com resposta: Usando a ajuda inestimável decodeWizard Eu consegui fazer isso no final.
Usando odangling blob
não funcionou muito porque quase não havia arquivos lá. Isso pode ocorrer porque, ao tentar resolvê-lo, mudei um dos arquivos de volta para o último check-out e o git excluiu os outros arquivos do material pendente.
Porém, todas as informações necessárias estão realmente nodangling commit
parte.
Então aqui está o que eu fiz com a ajuda decodeWizard
Primeiro,copie o diretório do repositório na íntegra e só funciona a partir daí.
Em seguida, execute o comando git:
git fsck --full
Ele gera algo como:
Checking object directories: 100% (256/256), done.
dangling blob 0c8676d28b6b063592493bce281530fb7098a41c
dangling blob 5040b2db1a895ea4aa69c993e0df7cd48823eaec
dangling blob 5ffc6f27406506a01aa13e9b773b574840cef7ac
dangling blob 676efa400477c8d92787a39978f73114f39e0f89
dangling commit 8a44f14eb0821859c0e1cdf0d81038c8431a1007
dangling commit 968e27b0d49b899ab2d43a964b561e4dfd2aa41f
dangling commit 9f5e56caa8b904d93acd43b05f3817ff975a0423
Agora, mostrando odangling commit
usando o SHA:
git show - p 8a44f14eb0821859c0e1cdf0d81038c8431a1007
A saída será realmente o diff git para esseencenado, mas nunca comprometido alterar:
commit 8a44f14eb0821859c0e1cdf0d81038c8431a1007
Author: Me <[email protected]>
Date: Sun Jan 3 02:07:10 2016 +0000
oO
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ec6eec8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/#bootstrap.sh#
+/emacs.d/#init.el#
+*~
diff --git a/bootstrap.sh b/bootstrap.sh
O que você precisa fazer para verificar oDate
e veja aquele que combina com você (na verdade, eles são do mesmo período para mim).
Depois disso, você apenas precisa emitir o comando:git checkout 8a44f14eb0821859c0e1cdf0d81038c8431a1007
E você terá todos os seus arquivos adicionados para confirmar, mas que você nunca confirmou.
O único problema que encontrei foi que, depois disso, você ficará com ogit status
:
HEAD detached at 8a44f14
nothing to commit, working directory clean
Copiei todos os arquivos alterados de volta para o repositório original e tudo estava bem.