some_dir_path
으로 git repo를 초기화했습니다 git init
. 그 후 모든 파일을 repo에 포함하지 않기로 결정하고 git rm -f
. 내 생각대로 디렉토리 자체가 아닌 git repo에서 모든 파일이 제거됩니다. 이제 some_dir_path
.git 자체를 제외하고는 비어 있습니다.
ls -aR some_dir_path:
.git:
branches config description HEAD hooks index info objects refs
...
그렇다면 문제는 데이터를 다시 가져올 수 있는 방법이 있느냐는 것입니다. 이전에는 복원할
커밋도 발행되지 않았고 분기도 없었습니다 .git rm -f
답변1
커밋된 파일이 없으므로 이제 손실됩니다.
커밋되었다면 다음을 실행하여 복구했을 것입니다.
git reset --hard
그러면 마지막 커밋 이후 제거된 파일이 복원되고 다른 파일에 대한 변경 사항이 되돌려집니다.
또한보십시오 git reset --help
.
답변2
커밋 git rm
되지 않았으므로 절차는 매우 간단합니다.
시작점: "onefile"이 추가되었습니다.
$ git cat-file -p HEAD:onefile
content...
$ cat onefile
content...
이제 git rm
:
$ git rm -f onefile
rm 'onefile'
$ ls
파일이 정말 없어졌습니다. git 명령은 커밋되지 않습니다. (라인 rm 'onefile'
은산출, 명령이 아닙니다!)
지금 당장 조언을 구하는 것은 쉽습니다. 당황하지 말고 개요를 얻으십시오.
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: onefile
힌트를 따르면 다음과 같습니다.
$ git reset HEAD *
Unstaged changes after reset:
D onefile
삭제가 커밋되지 않음에서 준비되지 않음으로 변경되었습니다.
$ git archive HEAD -o playback.tar
$ tar xf playback.tar --to-stdout
content...
커밋 되면 git rm
a git reset HEAD~
가 필요합니다.
just 이후 저장소가 비어 있으면 명령 git init
은 git rm
"안전"합니다.
$ git rm *
fatal: pathspec '*' did not match any files
Q는 init와 rm 사이에 일어난 일을 숨깁니다. git add였어야 했나?