etc./StackOverFlow

프로젝트 커밋 기록에서 삭제된 파일을 찾는 방법은 무엇입니까?

청렴결백한 만능 재주꾼 2022. 2. 17. 12:25
반응형

질문자 :Pedro Rolo


옛날 옛적에 내 프로젝트에 지금 얻고 싶은 파일이 있었습니다.

문제는 내가 언제 삭제했는지, 어떤 경로에 있었는지 알 수 없다는 것입니다.

이 파일이 존재했을 때 커밋을 어떻게 찾을 수 있습니까?



정확한 경로를 모르는 경우 사용할 수 있습니다.

 git log --all --full-history -- "**/thefile.*"

파일이 있었던 경로를 알고 있으면 다음과 같이 할 수 있습니다.

 git log --all --full-history -- <path-to-file>

그러면 해당 파일을 건드린 모든 분기의 커밋 목록이 표시됩니다. 그런 다음 원하는 파일의 버전을 찾아 다음과 같이 표시할 수 있습니다.

 git show <SHA> -- <path-to-file>

또는 다음을 사용하여 작업 복사본으로 복원합니다.

git checkout <SHA>^ -- <path-to-file>

확인된 것 보다 먼저 체크아웃하는 캐럿 기호( ^ <SHA> 커밋하는 순간 파일이 삭제되므로 삭제된 파일의 내용을 가져오기 위해 이전 커밋을 살펴봐야 하기 때문입니다.


Amber

삭제된 파일 목록을 가져오고 삭제된 파일의 전체 경로를 복사합니다.

 git log --diff-filter=D --summary | grep delete

다음 명령을 실행하여 해당 커밋의 커밋 ID를 찾고 커밋 ID를 복사합니다.

 git log --all -- FILEPATH

삭제된 파일의 차이점 표시

 git show COMMIT_ID -- FILE_PATH

> like를 사용하여 파일에 출력을 쓸 수 있음을 기억하십시오.

 git show COMMIT_ID -- FILE_PATH > deleted.diff

Fatih Acet

MyFile 파일을 복구하려고 하지만 경로(또는 확장자)가 확실하지 않다고 가정합니다.

예비: git 루트로 이동하여 혼동을 피하십시오.

중요하지 않은 프로젝트에는 파일 이름이 비슷하거나 동일한 여러 디렉토리가 있을 수 있습니다.

 > cd <project-root>
  1. 전체 경로 찾기

    git log --diff-filter=D --summary | 그렙 삭제 | grep 내 파일

    delete mode 100644 full/path/to/MyFile.js

full/path/to/MyFile.js 는 찾고 있는 경로 및 파일입니다.

  1. 해당 파일에 영향을 준 모든 커밋 확인

    git log --oneline --follow -- 전체/경로/to/MyFile.js

    bd8374c Some helpful commit message

    ba8d20e Another prior commit message affecting that file

    cfea812 The first message for a commit in which that file appeared.

  2. 파일 체크아웃

첫 번째 커밋(시간순으로 마지막, 여기서는 bd8374c)을 선택하면 해당 커밋에서 파일이 삭제되었기 때문에 파일을 찾을 수 없습니다.

 > git checkout bd8374c -- full/path/to/MyFile.js `error: pathspec 'full/path/to/MyFile.js' did not match any file(s) known to git.`

이전(캐럿 추가) 커밋을 선택하기만 하면 됩니다.

 > git checkout bd8374c^ -- full/path/to/MyFile.js

Calaf

수락된 응답을 편집할 수 없으므로 여기에 답변으로 추가하십시오.

git에서 파일을 복원하려면 다음을 사용하십시오(SHA 바로 뒤에 있는 '^' 기호에 주의).

 git checkout <SHA>^ -- /path/to/file

Akshay Agarwal

@Amber님이 정답을 맞췄습니다! 한 가지만 더 추가하면 파일의 정확한 경로를 모르는 경우 와일드카드를 사용할 수 있습니다! 이것은 나를 위해 일했습니다.

 git log --all -- **/thefile.*

Petur Subev

다음은 dev 또는 git 사용자가 저장소 루트 디렉터리에서 삭제된 파일 이름을 전달하고 기록을 가져올 수 있는 간단한 명령입니다.

 git log --diff-filter=D --summary | grep filename | awk '{print $4; exit}' | xargs git log --all --

명령을 개선할 수 있는 사람이 있으면 수행하십시오.


Jason

gitk 와 같은 뷰어 중 하나를 사용하여 기록을 탐색하여 절반만 기억된 파일을 찾을 수 있습니다. (모든 분기에 필요한 경우 gitk --all


Philip Oakley

요약:

  1. 1 단계

삭제된 파일 기록에서 파일 전체 경로를 검색합니다. git log --diff-filter=D --summary | grep filename

  1. 2 단계

파일이 삭제되기 전에 커밋에서 파일을 복원합니다.

 restore () { filepath="$@" last_commit=$(git log --all --full-history -- $filepath | grep commit | head -1 | awk '{print $2; exit}') echo "Restoring file from commit before $last_commit" git checkout $last_commit^ -- $filepath } restore my/file_path

srghma

내 솔루션은 다음과 같습니다.

 git log --all --full-history --oneline -- <RELATIVE_FILE_PATH> git checkout <COMMIT_SHA>^ -- <RELATIVE_FILE_PATH>

Antonio Petricca

삭제된 모든 파일 size 를 보고 싶다면

뿐만 아니라 관련 SHA

 git log --all --stat --diff-filter=D --oneline

내용을 보려면 -p를 추가하십시오.

 git log --all --stat --diff-filter=D -p

파일로 범위를 좁히려면 grep으로 파이프하고 파일 이름을 검색하십시오.

 git log --all --stat --diff-filter=D --oneline | grep someFileName

파일이 어디에 있는지 안다면 이 파일을 좋아할 수도 있습니다.

 git log --all --full-history -- someFileName

jasonleonhard

출처 : http:www.stackoverflow.com/questions/7203515/how-to-find-a-deleted-file-in-the-project-commit-history

반응형