programing tip

Git 리포지토리에서 삭제 된 폴더 복원

itbloger 2020. 10. 23. 07:38
반응형

Git 리포지토리에서 삭제 된 폴더 복원


폴더 안의 모든 내용을 삭제했는데 폴더가 비어 있습니다. 내 원격 저장소에 여전히 복사본이 있습니다. 하지만 내가했을 때 git pull삭제 된 파일을 되 돌리지 않았는데 그렇게해서는 안 되나요?

그래서 조사를했고 다음을 수행하여 파일을 되돌릴 수 있음을 확인 git checkout <revision> -- <name of file>

그러나 그것은 파일에서만 작동합니다.

디렉토리 안의 모든 파일을 어떻게 검색 할 수 있습니까?


파일로 할 수있는 모든 작업은 폴더로도 할 수 있습니다.

또한 참고 찾기 및 Git 저장소에서 삭제 된 파일을 복원

작업 트리에서 파일이 삭제되었지만 아직 커밋되지 않았습니다.

아직 색인을 생성하지 않은 경우 ( git add) 디렉토리의 내용을 되돌릴 수 있습니다.

git checkout -- path/to/folder

삭제가 이미 색인화 된 경우 먼저 재설정해야합니다.

git reset -- path/to/folder
git checkout -- path/to/folder

전체 작업 트리 (단일 폴더가 아님)를 복원하지만 커밋되지 않은 모든 변경 사항이 손실됩니다.

git reset --hard HEAD

과거에 일부 커밋에서 파일이 삭제 된 경우 :

주어진 경로에 영향을 준 마지막 커밋을 찾습니다. 파일이 HEAD 커밋에 없기 때문에이 커밋에서 삭제해야합니다.

git rev-list -n 1 HEAD -- <file_path>

그런 다음 캐럿 ( ^) 기호를 사용하여 이전 커밋에서 버전을 확인합니다 .

git checkout <deleting_commit>^ -- <file_path>

먼 커밋에서 전체 작업 트리 복원

git reset --hard <revision> 

변경 사항을 아직 커밋하지 않은 경우 콘텐츠 또는 디렉토리를 되돌릴 수 있습니다.

git checkout -- removed_directory

모든 변경 사항을 되돌리려면 다음을 수행하십시오.

git reset --hard HEAD

나를 위해 일한 유일한 것은 다른 폴더의 저장소를 체크 아웃하는 것입니다. 현재 저장소가 /home/me/current.

그런 다음

git clone /home/me/current /home/me/temp

이것은 저장소의 별도 복제본을 만듭니다. /home/me/temp

이제 /home/me/temp내가 원하는대로 가서 할 수 있습니다 . 예를 들면

git reset --hard commit-hash-before-delete

이제 삭제 된 파일 폴더를 다시 복사 할 수 있습니다.

cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder

임시 폴더를 삭제하십시오.

rm -rf /home/me/temp

의 예

git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*

작동하지 않습니다

$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.

같은 다른 예

git reset --hard HEAD

삭제 된 파일 외에도 파괴적입니다. 다른 모든 변경 사항도 손실됩니다.

비슷하게

git reset --hard some-commit

이후 커밋을 잃을 것입니다. some-commit


특정 파일을 지정하지 않으면 특정 커밋의 전체 내용을 가져올 수 있어야합니다. 예 : git checkout 264794319e9695ba843cd6(해시가 모든 파일을 올바른 상태로 가지고 있다고 가정).

그 이유 pull는 파일을 복원하지 않는 이유 는 git이 삭제 한 내용을 최근 변경 사항으로 간주하여 가져 오는 항목 위에 적용하기 때문입니다.

(새 브랜치에서 실험 해 보는 것이 좋습니다.)


커밋되지 않은 삭제의 경우 다음과 같이 간단합니다.

git reset HEAD rel / path / to / deleted / directory / *

참고 URL : https://stackoverflow.com/questions/30875205/restore-a-deleted-folder-in-a-git-repo

반응형