프로젝트 커밋 기록에서 삭제된 파일을 찾으려면 어떻게 해야 합니까?
옛날 옛적, 내 프로젝트에 내가 지금 얻을 수 있는 파일이 있었다.
문제는 언제 삭제했는지, 어떤 경로로 삭제했는지 알 수 없다는 것입니다.
이 파일이 존재했을 때 어떻게 커밋을 찾을 수 있습니까?
정확한 경로를 모를 경우 사용할 수 있습니다.
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>
전체 경로 찾기
git log --diff-filter=D --disp|grep delete|grep MyFile
delete mode 100644 full/path/to/MyFile.js
full/path/to/MyFile.js
원하는 경로 및 파일입니다.
해당 파일에 영향을 준 모든 커밋 확인
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.
파일 체크 아웃
첫 번째 커밋(최종 시간순 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
된 파일 합니다.git log --diff-filter=D --summary | grep filename
- 순서 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
'source' 카테고리의 다른 글
Windows에서 Git에 CR+LF 대신 LF를 사용하도록 강제하는 방법은 무엇입니까? (0) | 2023.04.22 |
---|---|
Swift에서 pull을 사용하여 새로 고치는 방법 (0) | 2023.04.22 |
제공된 데이터가 Office 2007+ XML에 있는 것으로 보이는 Java POI (0) | 2023.04.22 |
excel의 regex를 찾아 대체하는 방법 (0) | 2023.04.22 |
프로그래밍 방식으로 번들 식별자 가져오기 (0) | 2023.04.22 |