git 저장소 기록에서 전체 디렉토리를 복원하는 방법은 무엇입니까? 커밋을 알고 있습니다. 부모 커밋의 sha1 해시를 사용하여

내 git 저장소의 기록에서 전체 디렉토리를 (재귀 적으로) 복원하고 싶습니다.

브랜치 (마스터)는 1 개뿐입니다.

오류가 포함 된 커밋을 알고 있습니다.

부모 커밋의 sha1 해시를 사용하여 오류가 포함되기 전의 디렉터리 상태를 복원 할 수 있습니까?

나는 다음과 같은 것에 대해 생각했다.

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/

하지만 작동하지 않았습니다.



답변

개정판과 경로 사이에 ‘-‘를 추가해보십시오.

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/

그리고 이전 커밋에서 디렉토리를 복구하려면 커밋 해시를 HEAD ~ 1로 바꿀 수 있습니다. 예를 들면 다음과 같습니다.

git checkout HEAD~1 -- path/to/the/folder/

답변

이를 수행하는 두 가지 쉬운 방법이 있습니다.

오류가 포함 된 커밋에 오류 포함 된 경우를 사용 git revert하여 그 효과를 반전합니다.

그렇지 않은 경우 쉬운 경로는 다음과 같습니다.

  1. git checkout 348…
  2. cp -a path/to/the/folder ../tmp-restore-folder
  3. git checkout HEAD # or whatever
  4. rm -rf path/to/the/folder
  5. mv ../tmp-restore-folder path/to/the/folder
  6. git add path/to/the/folder
  7. git commit -m "revert …"

답변

당신이 단순히 git checkout <SHA-ID> 그것은 일시적으로 그 샤 커밋로 이동합니다.

각 커밋 객체는 당시 디스크의 전체 구조를 유지하므로 파일이 있고 복사해야하는 경우 그렇게 할 수 있습니다. 그러나 경고, 당신은 어떤 브랜치에도 없을 것이므로 파일을 작업 트리에 복사하고 커밋하기 전에 마스터로 돌아 가야합니다.