source

프로젝트 커밋 기록에서 삭제된 파일을 찾으려면 어떻게 해야 합니까?

ittop 2023. 4. 22. 10:29
반응형

프로젝트 커밋 기록에서 삭제된 파일을 찾으려면 어떻게 해야 합니까?

옛날 옛적, 내 프로젝트에 내가 지금 얻을 수 있는 파일이 있었다.

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

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

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

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>commit 파일이 삭제되었습니다.삭제된 파일의 내용을 가져오려면 이전 커밋을 확인해야 합니다.

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

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

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

git log --all -- FILEPATH

삭제된 파일의 차이 표시

git show COMMIT_ID -- FILE_PATH

파일에 출력을 쓸 수 있습니다.>맘에 들다

git show COMMIT_ID -- FILE_PATH > deleted.diff

다음과 같은 파일을 복구한다고 가정합니다.MyFile단, 패스(또는 확장)는 불명확합니다.

예비:git root로 이동하여 혼동을 방지합니다.

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

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

    git log --diff-filter=D --disp|grep delete|grep MyFile

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

full/path/to/MyFile.js원하는 경로 및 파일입니다.

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

    git log --online --follow --full/path/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

승인된 응답을 편집할 수 없으므로 여기에 응답으로 추가합니다.

git에 파일을 복원하려면 다음 명령을 사용합니다(SHA 바로 뒤에 '^' 기호를 참조하십시오).

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

@Amber는 정답을 맞혔다!한 번만 더 추가하면 파일의 정확한 경로를 모를 경우 와일드카드를 사용할 수 있습니다!이건 나한테 효과가 있었어.

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

다음은 간단한 명령어입니다.dev 또는 git 사용자는 저장소 루트 디렉토리에서 삭제된 파일 이름을 전달하고 이력을 얻을 수 있습니다.

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

명령어를 개선할 수 있는 사람이 있다면 그렇게 하십시오.

시청자 한 .gitk(사용하다gitk --all든든 、 요한한한브요 )

「 」를 는, 「 」를 해 주세요.size deleted file(모든 삭제된 )

관련지어져 있는 「」를 참조해 주세요.SHA

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

덧붙이다-p|--patch

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

두 가지 쉬운 옵션을 가진 임의의 파일로 범위를 좁히려면 pathspec을 사용하거나 grep에 파이프로 연결하여 파일 이름을 검색할 수 있습니다.

GREP 사용:

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

패스스펙 사용:

git log --all --stat --diff-filter=D --oneline -- '*foo*'

pathspec은 다음과 같이 동작할 수 있습니다.-p|--patch「CHANGE MARGE:」

git log --all --stat --diff-filter=D --oneline --patch -- '*foo*'

파일이 어디에 있는지 알고 있다면 이 파일도 마음에 들 것입니다.

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

요약:.

  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

저의 솔루션은 다음과 같습니다.

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

파일 이름조차 모르는 일이 있어서 삭제된 파일들을 다 보고 싶었는데...

일반적으로 git-filter-repo에 익숙해지는 것을 강력히 추천합니다.기록 재작성에는 많은 용도가 있지만, 분석 기능 중 하나는 repo에서 삭제된 모든 파일을 매우 빠르게 식별하고 삭제된 크기와 날짜를 표시하는 것입니다.(Windows OS 이외의 OS에서 사용하는 것은 매우 간단합니다.다음은 Windows 전용의 인스톨 순서입니다).

경로에서 실행이 가능해지면 다음과 같이 실행할 수 있습니다.

git filter-repo --analyze

그러면 .git 폴더에 있는 일부 파일이 출력됩니다.이 질문에 대해 보고 싶은 파일은 다음과 같습니다.

.git\filter-repo\analysis\path-deleted-sizes.txt

이 파일에는 repo에서 삭제된 모든 파일, 크기별로 역순으로 정렬된 파일 및 삭제된 날짜가 표시됩니다.다음으로 출력 예를 나타냅니다.

=== Deleted paths by reverse accumulated size ===
Format: unpacked size, packed size, date deleted, path name(s)
    57151421   44898377 2022-07-22 somdirectory/somefileA
    46034619   42929136 2022-01-18 somdirectory/somefileB
    65332368   29102439 2020-09-28 somdirectory/somefileC
    23686432   21681498 2022-07-22 somdirectory/somefileD
    23681272   21678818 2022-07-22 somdirectory/somefileE
    23676153   21670502 2022-07-22 somdirectory/somefileF
    43232768   21439037 2020-07-10 somdirectory/somefileG
    18714315   14299243 2019-01-10 somdirectory/somefileH
    16788104   13035176 2019-01-10 somdirectory/somefileI

물론 이 기능을 사용하여 찾고 있는 파일을 찾을 수 있습니다.또는 기록 재작성 시 두 번째 열 크기를 기준으로 삭제한 9개의 파일을 기록에서 삭제하면 약 220MB를 회수할 수 있습니다.

찾고 있는 파일을 식별하면 이를 사용하여 커밋을 찾을 수 있습니다.

git log --all --full-history -- <filename>

언급URL : https://stackoverflow.com/questions/7203515/how-to-find-a-deleted-file-in-the-project-commit-history

반응형