나는 교장실에있는 한 아이가 개가 숙제를하기 전날 밤 숙제를 먹었다 고 설명하지만 얼굴에 미친 데이터 손실 버그를 쳐다보고 있는데 어떻게 된 것인지 알 수 없습니다. git이 어떻게 저장소 전체를 먹을 수 있는지 알고 싶습니다! 나는 자식을 여러 번 꿰 뚫었 고 결코 깜박이지 않았습니다. 나는 그것을 사용하여 20 Gig Subversion 저장소를 27 git repos로 나누고 엉망을 풀기 위해 foo를 필터링했습니다. Reflog는 항상 폴백합니다. 이번에는 카펫이 사라졌습니다!
내 관점에서, 내가 한 모든 것은 실행 git pull
되고 전체 로컬 저장소를 손상시켰다. 나는 그것이 "체크 아웃 된 버전을 엉망으로 만들었다"또는 "내가 있던 지점"또는 이와 유사한 것을 의미하지는 않는다. 모든 것이 사라 졌음을 의미 합니다 .
사건에 대한 내 터미널의 스크린 샷은 다음과 같습니다.
그 과정을 안내해 드리겠습니다. 내 명령 프롬프트에는 현재 git repo (prezto의 vcs_info 구현 사용)에 대한 데이터가 포함되어 있으므로 git repo가 사라진 시점을 확인할 수 있습니다. 첫 번째 명령은 충분히 정상입니다.
» caleb » jaguar » ~/p/w/incil.info » ◼ zend ★ »
❯❯❯ git co master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
거기에서 내가 'zend'지점에 있었고 마스터를 체크 아웃 한 것을 볼 수 있습니다. 여태까지는 그런대로 잘됐다. 다음 명령 전에 프롬프트에서 분기가 성공적으로 전환되었음을 알 수 있습니다.
» caleb » jaguar » ~/p/w/incil.info » ◼ master ★ »
❯❯❯ git pull
remote: Counting objects: 37, done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 37 (delta 25), reused 0 (delta 0)
Unpacking objects: 100% (37/37), done.
From gitlab.alerque.com:ipk/incil.info
+ 7412a21...eca4d26 master -> origin/master (forced update)
f03fa5d..c8ea00b devel -> origin/devel
+ 2af282c...009b8ec verse-spinner -> origin/verse-spinner (forced update)
First, rewinding head to replay your work on top of it...
>>> elapsed time 11s
그리고 그처럼 사라졌습니다. 10 초 이상 경과하면 다음 프롬프트 전에 경과 시간 마커가 출력됩니다. 힘내는 다시 재생하기 위해 되감기 고지 이상의 출력을 제공하지 않았습니다. 완료되었다는 표시가 없습니다.
다음 프롬프트에는 현재 어떤 브랜치 또는 git 상태에 대한 데이터가 없습니다.
그것이 실패했다는 것을 알지 못했지만 나는 분명히 git repo에 있지 않다는 것을 알리기 위해 다른 git 명령을 실행하려고 시도했습니다. PWD는 변경되지 않았습니다.
» caleb » jaguar » ~/p/w/incil.info »
❯❯❯ git fetch --all
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
이 후 주변을 살펴본 결과 완전히 빈 디렉토리에 있음을 알 수있었습니다. 아무것도. '.git'디렉토리가 없습니다. 빈.
내 로컬 자식은 버전 2.0.2입니다. 다음은 git config의 몇 가지 tidbits입니다.
[branch]
autosetuprebase = always
rebase = preserve
[pull]
rebase = true
[rebase]
autosquash = true
autostash = true
[alias]
co = checkout
예를 들어 git pull
, 병합 대신 항상 리베이스를 수행하도록 설정했기 때문에 위 출력의 일부가 정상입니다.
데이터를 복구 할 수 있습니다. 다른 저장소로 푸시되지 않은 중요하지 않은 스태 이스 이외의 자식 객체는 없다고 생각하지만 어떤 일이 있었는지 알고 싶습니다 .
나는 확인했다 :
- dmesg 또는 시스템 저널의 메시지 원격으로 관련된 것도 없습니다.
- 드라이브 또는 파일 시스템 오류가 표시되지 않습니다 (LVM + LUKS + EXT4 모두 정상으로 보입니다). 잃어버린 + 발견에는 아무것도 없습니다.
- 나는 다른 것을 달리지 않았다. 위에 표시되지 않은 기록에는 아무것도 없으며이 기간 동안 다른 터미널이 사용되지 않았습니다.
rm
잘못된 CWD 등에서 실행되었을 수있는 명령 이 없습니다 . - 다른 디렉토리에서 다른 자식 저장소를 파고 들면
git pull
s를 실행하는 명백한 이상이 없습니다 .
여기서 무엇을 더 찾아야합니까?
.git
존재하지 않습니다. 아무것도하지 않습니다. git root 디렉토리였던 것은 전혀 아무것도 없습니다.