Git 저장소에서 삭제된 파일을 찾아서 복원하려면 어떻게 해야 하나요?
내가 Git 저장소에 있다고 가정해봐.파일을 삭제하고 변경을 확정합니다.나는 일을 계속하고 더 많은 약속을 한다.그 파일을 삭제한 후 복원해야 한다는 것을 알게 되었습니다.
할 수 것은 .git checkout <commit> -- filename.txt
언제 그 파일이 삭제되었는지 모르겠습니다.
- 특정 파일명을 삭제한 커밋을 찾으려면 어떻게 해야 하나요?
- 이 파일을 작업 복사본으로 복원하려면 어떻게 해야 합니까?
지정된 경로에 영향을 준 마지막 커밋을 찾습니다.파일이 HEAD 커밋에 없기 때문에 이전 커밋에서 삭제되었을 것입니다.
git rev-list -n 1 HEAD -- <file_path>
다음 carlet을 하여 이전합니다.^
) 호 :
git checkout <deleting_commit>^ -- <file_path>
「」의 경우는,$file
해당 파일입니다.
git checkout $(git rev-list -n 1 HEAD -- "$file")^ -- "$file"
zsh를 사용하고 EXTENDED_GLOB 옵션이 활성화되어 있으면 캐럿 기호가 작동하지 않습니다.하시면 됩니다.~1
★★★★★★ 。
git checkout $(git rev-list -n 1 HEAD -- "$file")~1 -- "$file"
삭제된 파일과 함께 삭제된 모든 커밋을 가져옵니다.
git log --diff-filter=D --summary
해시를 " " " " " " " " ) 。
e4e6d4d5e5c59c69f3bd7be2
.을 1개의합니다(「1」).
~1
( 「커밋」)에 「커밋」)을 실시합니다.e4e6d4d5e5c59c69f3bd7be2
git checkout e4e6d4d5e5c59c69f3bd7be2~1 path/to/file.ext
해 주세요.
~1
.
폴더의 삭제된 파일을 모두 복원하려면:
git ls-files -d | xargs git checkout --
에 있는 HEAD
하여 복원할 수 .
git checkout HEAD -- path/to/file.ext
미쳤다면 를 사용해 주세요.대처법은 다음과 같습니다.
git bisect start
git bisect bad
git bisect good <some commit where you know the file existed>
이치노 명령어 셸 " " "'[ -e foo.bar ]'
됩니다.foo.bar
1번, 1번, 1번."run의 "" 명령어git-bisect
는 바이너리 검색을 사용하여 테스트에 실패한 첫 번째 커밋을 자동으로 검색합니다.지정된 범위(양호에서 불량)의 중간부터 시작하여 지정된 테스트 결과에 따라 절반으로 나뉩니다.
git bisect run '[ -e foo.bar ]'
이제 삭제한 커밋에 도달했습니다.여기서부터 미래로 돌아가서 변경을 원래대로 되돌릴 수 있습니다.
git bisect reset
git revert <the offending commit>
또는 1개의 커밋으로 돌아가서 수동으로 파손을 검사할 수 있습니다.
git checkout HEAD^
cp foo.bar /tmp
git bisect reset
cp /tmp/foo.bar .
boneyii의 답변(업 투표)과 "Git alias 명령에 인수를 전달하라"에 대한 내 자신의 답변에 기초한 새로운 즐겨찾기 별칭:
git config alias.restore '!f() { git checkout $(git rev-list -n 1 HEAD -- $1)~1 -- $(git diff --name-status $(git rev-list -n 1 HEAD -- $1)~1 | grep '^D' | cut -f 2); }; f'
파일을 잃어버렸는데 실수로 몇 가지 커밋 전에 삭제한 적이 있습니까?
: :
git restore my_deleted_file
위기를 모면했다.
경고: Git 2.23(Q3 2019)에서는 (!)라는 이름의 실험 명령어가 나옵니다.
따라서 이 에일리어스의 이름을 변경합니다(아래 참조).
Robert Dailey는 코멘트에서 다음과 같은 별칭을 제안합니다.
restore-file = !git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
명령줄에서 에일리어스를 설정하기 위해 다음 명령을 사용했습니다.
git config --global alias.restore "\!git checkout \$(git rev-list -n 1 HEAD -- \"\$1\")^ -- \"\$1\""
파일명을 알고 있는 경우는, 기본적인 커맨드를 사용하면, 다음과 같이 간단하게 할 수 있습니다.
해당 파일에 대한 모든 커밋을 나열합니다.
git log -- path/to/file
마지막 커밋(맨 위)은 파일을 삭제한 커밋입니다.두 번째 커밋을 마지막 커밋으로 복원해야 합니다.
git checkout {second to last commit} -- path/to/file
삭제 및 커밋된 파일을 복원하려면:
git reset HEAD some/path
git checkout -- some/path
Git 버전 1.7.5.4에서 테스트되었습니다.
다음 방법 중 하나를 사용하여 파일이 삭제된 커밋의 ID를 가져옵니다.
git log --grep=*word*
git log -Sword
git log | grep --context=5 *word*
git log --stat | grep --context=5 *word*
게 #
다음과 같은 정보를 얻을 수 있습니다.
commit bfe68bd117e1091c96d2976c99b3bcc8310be7 작성자:Alexander Orlov 날짜:2011년 5월 12일 (목) 23:44:27 + 0200
replaced deprecated GWT class - gwtI18nKeySync.sh, an outdated (?, replaced by a Maven goal) I18n generation script
3ea4e3af253ac6fd1691ff6bb89c964f54802302 작성자:Alexander Orlov 날짜:2011년 5월 12일 (목) 22:10:22 + 0200
3. 커밋 ID bfe68bd117e1091c96d2976c99b3bcc8310be7을 사용하여 다음 작업을 수행합니다.
git checkout bfe68bd117e1091c96d2976c99b3bcc8310bebe7^1 yourDeletedFile.java
는 "ID"를 "bfe68b"를 추가하여 수행할 수 .이것에 대해서는, 추가에 의해서 실행할 수 있습니다.^1
bfe68b의 을 주세요.
변경만 하고 파일을 삭제했을 뿐 커밋은 하지 않고 변경과 함께 종료한 경우
git checkout -- .
삭제한 파일이 반환되지 않았습니다.다음 명령어를 실행하기만 하면 됩니다.
git checkout <file_path>
그리고 프리스토, 당신의 파일이 돌아왔습니다.
사실 이 질문은 Git에 관한 것입니다만, 저 같은 사람은 Git CLI 명령어를 아는 것 외에 WebStorm VCS와 같은 GUI 툴을 사용하고 있습니다.
삭제된 파일이 포함된 경로를 오른쪽 클릭하여 Git으로 이동한 후 Show History를 클릭합니다.
VCS 도구에는 모든 리비전 배열이 표시되고 각 리비전별 커밋 및 변경 내용이 모두 표시됩니다.
합니다.PostAd.js
일이.
그리고 지금, 나는 나의 욕망이 삭제된 파일을 볼 수 있다.파일명을 더블클릭하면 회복됩니다.
Git 명령어가 아닌 것은 알지만, 초보자 및 전문 개발자들에게는 빠르고 신뢰할 수 있고 쉽습니다.WebStorm VCS 툴은 Git을 사용하는 데 매우 적합하며 다른 플러그인이나 툴이 필요하지 않습니다.
git undelete path/to/file.ext
을 당신의 것 your your this에 넣으세요.
.bash_profile
때 파일): ('커맨드셸을 열었을 때 로딩되는 파일)git config --global alias.undelete '!sh -c "git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1" -'
다음으로 다음을 사용합니다.
git undelete path/to/file.ext
이 에일리어스는 먼저 이 파일이 존재했던 마지막 커밋을 찾은 후 이 파일이 존재했던 마지막 커밋에서 해당 파일 경로를 Git 체크 아웃합니다.출처.
git checkout /path/to/deleted.file
많은 경우 Git과 연동하여 coreutils(grep, sed 등)를 사용하면 편리합니다.나는 이미 이 도구들을 잘 알고 있지만, Git은 그렇지 않다.삭제된 파일을 검색하려면 다음을 수행합니다.
git log --raw | grep -B 30 $'D\t.*deleted_file.c'
리비전/커밋을 찾으면:
git checkout <rev>^ -- path/to/refound/deleted_file.c
다른 사람들이 내 앞에서 말한 것처럼.
이제 파일이 삭제 전 상태로 복원됩니다.유지하려면 작업 트리에 다시 커밋해야 합니다.
저도 같은 질문이 있었어요.나도 모르게 매달리는 커밋이 생겼다.
매달리는 커밋 나열
git fsck --lost-found
각 커밋을 조사합니다.
git reset --hard <commit id>
행잉 커밋으로 이동했을 때 파일이 다시 표시되었습니다.
git status
★★★★
“HEAD detached from <commit id where it detached>”
파일을 삭제한 커밋을 찾습니다.
git log --diff-filter=D --oneline -- path/to/file | cut -f -d ' '
샘플 출력:
4711174
2. Git 2.23이 .restore
명령어를 입력합니다.아직 시험 단계이지만 커밋(이 경우 4711174)에서 삭제한 내용을 복원하려면 다음과 같이 입력합니다.
git restore --source=4711174^ path/to/file
commit id 뒤에 ^가 붙어 있는 것에 주의해 주세요.이것은, 파일을 삭제한 커밋보다 전의 커밋으로부터 복원하는 것입니다.
--source
는 을 .restore
명령어를 사용하여 복원할 파일을 찾을 수 있습니다.또, 임의의 커밋이나 인덱스를 지정할 수도 있습니다.
참조: git 2.23.0의 git-restore 문서
특정 커밋에서 삭제된 파일들을 많이 복원해야 했고 다음 두 가지 명령으로 관리했습니다.
git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git checkout <rev>^ --
git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git reset HEAD
(각 명령어 끝에 후행 공백을 적어 둡니다).
후 .gitignore 파일로 .git rm
파일을 복원해야 했는데, 그 후에 파일을 풀어야 했어요.복원해야 할 파일이 수백 개였고, 다른 예시와 같이 각 파일에 대해 수동으로 입력하는 것은 너무 느렸습니다.
user@bsd:~/work/git$ rm slides.tex
user@bsd:~/work/git$ git pull
Already up-to-date.
user@bsd:~/work/git$ ls slides.tex
ls: slides.tex: No such file or directory
삭제된 파일을 복원합니다.
user@bsd:~/work/git$ git checkout
D .slides.tex.swp
D slides.tex
user@bsd:~/work/git$ git checkout slides.tex
user@bsd:~/work/git$ ls slides.tex
slides.tex
이 경우 실수로 커밋에서 파일을 삭제했고, 나중에 일부 커밋에서 실수를 깨닫고 삭제된 모든 파일을 복구하고 싶었지만 수정된 파일은 복구하지 못했습니다.
Charles Bailey의 훌륭한 답변에 근거해, 제 단 한 마디만 말씀드리겠습니다.
git co $(git rev-list -n 1 HEAD -- <file_path>)~1 -- $(git diff --name-status $(git rev-list -n 1 HEAD -- <file_path>)~1 head | grep '^D' | cut -f 2)
플러스 포인트:다음 방법은 휴지통이나 휴지통에서 파일/폴더가 삭제된 시나리오에 적합합니다.
파일/폴더가 작업 트리에서 삭제되었지만 아직 커밋되지 않았습니다.
I. 변경 내용을 아직 색인화(git add)하지 않은 경우 디렉토리의 내용을 되돌릴 수 있습니다.
git restore -- path/to/folder_OR_file
II. 삭제가 이미 색인화되어 있는 경우 먼저 해당 항목을 재설정해야 합니다.
git reset -- path/to/folder_OR_file
「 」를해 주세요.git restore path/to/folder_OR_file
파일/폴더는 이전에 일부 커밋에서 삭제되었습니다.
git log --diff-filter=D --summary
파일/폴더가 삭제된 커밋의 상세 내용을 가져옵니다.git checkout $commit~1 path/to/folder_OR_file
를 클릭하여 삭제된 파일/폴더를 복원합니다.서 ★★★★★$commit
1에서 계--(( sha sha (((( ( c7578994 ) 。
있는 이 합니다.여기서는 파일을 삭제한 커밋입니다.<SHA1_deletion>
입니다.
git diff --diff-filter=D --name-only <SHA1_deletion>~1 <SHA1_deletion> | xargs git checkout <SHA1_deletion>~1 --
파이프 앞부분에는 커밋에서 삭제된 모든 파일이 나열됩니다.이 모든 파일은 이전 커밋에서 체크 아웃되어 복원됩니다.
그렇게 하는 가장 좋은 방법은 시도해 보세요.
먼저 파일을 삭제한 커밋의 커밋 ID를 찾습니다.파일을 삭제한 커밋의 개요가 표시됩니다.
git log --diff-filter=D --syslog
git checkout 84sdhfdbddf~1
★★★★★★84sdhfddbddd
의 것입니다commit id
이를 통해 삭제된 모든 파일을 쉽게 복구할 수 있습니다.
심플하고 정확한 -
우선, 그 파일을 입수할 수 있는 최신의 안정된 커밋을 입수합니다.
git log
$commitid 1234567...을 찾았다고 칩시다.
git checkout <$commitid> $fileName
그러면 해당 커밋에 포함된 파일 버전이 복원됩니다.
마스터에서 동일한 파일을 복원하는 것만으로 가장 쉬운 방법입니다.
git checkout master -- path/to/File.java
은 언제든지 할 수 .git revert
(이는 삭제가 커밋의 유일한 변경사항임을 전제로 합니다.
> git log
commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3
Author: Dave <dave@domain.com>
Date: Thu May 9 11:11:06 2019 -0700
deleted readme.md
작업을 계속하다가 나중에 삭제 커밋을 커밋하고 싶지 않다는 것을 깨달은 경우 다음을 사용하여 되돌릴 수 있습니다.
> git revert 2994bd
, 이제git log
하다
> git log
Author: Dave <dave@domain.com>
Date: Thu May 9 11:17:41 2019 -0700
Revert "deleted readme"
This reverts commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3.
★★★★★★★★★★★★★★★★★.readme.md
가 저장소로 복원되었습니다.
삭제가 커밋되지 않은 경우 다음 명령을 실행하면 삭제된 파일이 작업 트리에 복원됩니다.
$ git checkout -- <file>
다음 명령을 사용하여 작업 트리에서 삭제된 모든 파일 목록을 가져올 수 있습니다.
$ git ls-files --deleted
삭제가 커밋된 경우 해당 커밋이 발생한 곳을 찾은 후 이 커밋에서 파일을 복구합니다.
$ git rev-list -n 1 HEAD -- <file>
$ git checkout <commit>^ -- <file>
복구할 파일의 경로를 찾는 경우 다음 명령어는 삭제된 모든 파일의 요약을 표시합니다.
$ git log --diff-filter=D --summary
또한 다음 코드를 사용하여 이전 파일을 로컬디렉토리로 가져오는 경우에도 이 문제가 발생합니다.
git checkout <file path with name>
다음 예제가 도움이 됩니다.
git checkout resources/views/usaSchools.blade.php
삭제된 파일을 체크 아웃 할 수 있습니다.
git checkout
산출량
D index.html
복원 방법:
git restore index.html
여러 파일을 삭제하여 모든 사용을 복원해야 하는 경우:
git restore .
Gif 이미지 참조
$ git log --diff-filter=D --summary | grep "delete" | sort
삭제된 모든 파일을 Git으로 복원하려면 다음 작업을 수행할 수도 있습니다.
git checkout $(git ls-files --deleted)
서 ★★★★★git ls-files --deleted
, 삭제된 모든 과 「」의 을 참조해 주세요.git checkout $(git command)
을 사용하다
언급URL : https://stackoverflow.com/questions/953481/how-do-i-find-and-restore-a-deleted-file-in-a-git-repository
'source' 카테고리의 다른 글
Swift를 사용하여 이미지 크기를 조정하는 방법UI? (0) | 2023.04.16 |
---|---|
UILabel에서 줄 간격을 제어하는 방법 (0) | 2023.04.16 |
렌더링 시간과 성능 측면에서 패널이 가장 효율적인 순서는 무엇입니까? (0) | 2023.04.16 |
치명적 오류: 클래스에 구현되지 않은 이니셜라이저 'init(코더:)'을 사용합니다. (0) | 2023.04.16 |
cmd.exe에서 사용하는 인코딩/코드 페이지는 무엇입니까? (0) | 2023.04.16 |