"git rm" 이후 복원

"git rm" 이후 복원

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 rma git reset HEAD~가 필요합니다.

just 이후 저장소가 비어 있으면 명령 git initgit rm"안전"합니다.

$  git rm * 
fatal: pathspec '*' did not match any files

Q는 init와 rm 사이에 일어난 일을 숨깁니다. git add였어야 했나?

관련 정보