Git 저장소에서 삭제 된 파일 찾기 및 복원


2802

내가 Git 저장소에 있다고 가정 해보십시오. 파일을 삭제하고 해당 변경 사항을 커밋합니다. 나는 계속 일하고 더 커밋합니다. 그런 다음 해당 파일을 복원해야합니다.

을 사용하여 파일을 체크 아웃 할 수는 git checkout HEAD^ foo.bar있지만 그 파일이 언제 삭제되었는지는 알 수 없습니다.

  1. 주어진 파일 이름을 삭제 한 커밋을 찾는 가장 빠른 방법은 무엇입니까?
  2. 해당 파일을 작업 사본으로 되 돌리는 가장 쉬운 방법은 무엇입니까?

로그를 수동으로 탐색하고 지정된 SHA에 대한 전체 프로젝트를 체크 아웃 한 다음 해당 파일을 원래 프로젝트 체크 아웃에 수동으로 복사하지 않아도되기를 바랍니다.


39
이전 주석은 본문이 아닌 제목의 질문에 답변합니다 . 여기에는 파일이 언제 삭제 되었는지 확인하는 것이 포함 됩니다.
avdgaag

8
커밋을 찾으려면 다음 위치에서 파일을 삭제하십시오.git log --diff-filter=D -- path/to/file
titaniumdecoy



54
@hhh git checkout deletedFiledeletedFile삭제되었지만 삭제 가 아직 준비 또는 커밋되지 않은 경우 삭제를 취소 합니다 . 그것은 여기서 질문이 요구하는 것이 아닙니다. 이 질문은 많은 커밋 전에 삭제가 커밋 된 파일을 복원하는 방법에 관한 것입니다.
Mark Amery

답변:


3150

주어진 경로에 영향을 준 마지막 커밋을 찾으십시오. 파일이 HEAD 커밋에 없으므로이 커밋이 파일을 삭제해야합니다.

git rev-list -n 1 HEAD -- <file_path>

그런 다음 캐럿 ( ^) 기호를 사용하여 커밋에서 버전을 체크 아웃하십시오 .

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"

94
까다로운 비트는 ^ 접미사를 사용하여 커밋을 체크 아웃하는 것입니다. 감사.
Christian Oudard

4
어떤 이유로 zsh에서는 작동하지 않습니다. ± git checkout $(git rev-list -n 1 HEAD "spec/Sporkfile_example.rb")^ -- "spec/Sporkfile_example.rb" zsh: no matches found: b71c152d8f38dcd23ad7600a93f261a7252c59e9^ 나는 bash로 바꿨다.
zoras

20
Windows 명령 줄에서 오류가 발생했습니다. error: pathspec <filename> did not match any file(s) known to git.. 해결책은 git bash를 사용하는 것이 었습니다.
donturner

56
@zoras zsh는 '^'에 대한 자체 확장을 가지고 있지만 '~ 1'의 대체 구문을 사용할 수 있습니다. git checkout <deleting-commit>~1 -- <file-path> ~ X를 사용하면 지정된 커밋 전에 X 커밋을 지정할 수 있으므로 ~ 1은 이전 커밋입니다. ~ 2 등이 커밋 이전 인
닐스 Luxton

22
Windows cmd 프롬프트에서 ^문자는 이스케이프 문자입니다! 따라서 cmd에서 cmd에 입력 ^^하여 단일 리터럴 ^을 원하고 그 뒤에 다른 것을 빠져 나오지 않도록 입력해야합니다. 많은 사람들에게 일어나고있는 ^것은 뒤에 공백 이 있다는 것 입니다. 따라서 cmd는 공백을 이스케이프한다고 생각합니다. 이는 단순히 공백 문자를 생성합니다. 시간 자식이 CLI 인수를 얻을 수에 의해 따라서, 그것은보고 SHA1없습니다 SHA1^ . 정말 성가시다. ~이스케이프 문자가 아니기 때문에 여전히 작동합니다. (PS. Google 직원이이 정보를 원한다고 생각되면이 의견을 찬성하십시오.)
Alexander Bird

875
  1. git log --diff-filter=D --summary파일을 삭제하고 파일을 삭제 한 모든 커밋을 가져 오는 데 사용 합니다.
  2. git checkout $commit~1 path/to/file.ext삭제 된 파일을 복원하는 데 사용 합니다.

$commit1 단계에서 찾은 커밋 값은 어디에 있습니까?e4cf499627


10
궁금한 점은 ~ 1은 무엇을 의미합니까?
tommy chheng

7
@tommy-물결표는 명명 된 커밋의 n 번째 손자를 제공합니다. 자세한 내용은 book.git-scm.com/4_git_treeishes.html 을 참조하십시오.
Robert Munteanu

5
이것은 지금까지 가장 쉽고 직관적 인 접근 방식입니다. git log -- *PartOfMyFileName*. $commit~1
bgs

3
git checkout $commit~1 filename구문은 개별 파일에 대한 완벽한 작동하고, 또한 전체 디렉토리에 대한 작동합니다. 즉, sha 12345에서 ./images에서 삭제 된 모든 이미지를 복원하려면 : git checkout 12345~1 images. 이 답변에 감사드립니다!
noinput

34
@Alexar $commit~1는 커밋 이름을 추가해야 함을 의미합니다. 뭐 그런 1d0c9ef6eb4e39488490543570c31c2ff594426c$commit입니다.
유진

319

폴더에서 삭제 된 파일을 모두 복원하려면 다음 명령을 입력하십시오.

git ls-files -d | xargs git checkout --

1
파일은 어디로 파이프됩니까? 나는 변화가 없다.
William Grand

21
아마도 가장 쉬운 방법 일 것입니다. 그것은 git가장 간단한 작업조차도 얼마나 어렵게 만들 었는가 .
jww

git checkout-[file]은 [file]의 변경 사항을 되돌립니다. 파이프는 [file]을 삭제 된 파일 이름으로 바꿉니다.
Manu

6
ls-files하위 명령은 편리하지만, 함께 제거 된 파일을 작동하지 않는 것 git rm, 즉이 영업 이익은 무엇을 요구하다, 말할 것도 최선을 다하고 개최.
MarkHu

이것은 삭제 된 파일을 복원하는 데 효과적이지만 어떻게 변경되어 M myChangedFile이후에 표시되는 파일을 업데이트 할 수 git checkout있습니까?
libby

124

방금 삭제 한 파일을 복원하려고했지만이 변경 사항을 아직 커밋하지 않은이 질문에 왔습니다. 이 상황에 처한 경우를 대비하여 다음을 수행하면됩니다.

git checkout HEAD -- path/to/file.ext


93

미쳤다면을 사용하십시오 git-bisect. 수행 할 작업은 다음과 같습니다.

git bisect start
git bisect bad
git bisect good <some commit where you know the file existed>

이제 자동화 된 테스트를 실행할 차례입니다. 쉘 명령 '[ -e foo.bar ]'foo.bar존재 하면 0을 , 그렇지 않으면 1을 리턴 합니다. "run"명령은 git-bisect이진 검색을 사용하여 테스트가 실패한 첫 번째 커밋을 자동으로 찾습니다. 주어진 범위의 중간에서 시작하여 지정된 테스트 결과에 따라 반으로 줄입니다.

git bisect run '[ -e foo.bar ]'

이제 당신은 그것을 삭제 한 커밋에 있습니다. 여기에서 미래로 되돌아 가서 git-revert변경 사항을 취소하는 데 사용할 수 있습니다.

git bisect reset
git revert <the offending commit>

또는 하나의 커밋으로 돌아가서 수동으로 손상을 검사 할 수 있습니다.

git checkout HEAD^
cp foo.bar /tmp
git bisect reset
cp /tmp/foo.bar .

2
좀 더 자세히 설명해 주 git bisect run '[ -e foo.bar ]'시겠습니까?
avdgaag 2016 년

자동으로 확인할 수없는 경우 좋고 나쁨을 수동으로 사용할 수도 있습니다. bisect 매뉴얼 페이지를 참조하십시오.
Josh Lee

1
@avdgaag는 git bisect run명령 0good버전을 반환해야하는 'run'단어 다음에 명령을 실행하여 Git에게 이분을 자동화 하도록 지시합니다 (자세한 내용 git help bisect은 참조). 는 '[ -e foo.bar ]'파일이있는 경우 테스트하기위한 표준 표현 foo.bar존재 (구현 파일에 일반적으로하지 /usr/bin/[일반적으로 hardlinked한다 /usr/bin/test) 및 단일 quation 마크는 단일 명령 줄 인수로 모든 것을 넣어하는 데 사용됩니다.
Mikko Rantalainen

좋은 생각이야 나는이 접근법을 시도했지만 삭제 전에 커밋을 식별했지만 실제로 파일을 삭제 한 커밋은 식별하지 못했습니다. 그리고 다른 테스트에서는 삭제 전에 2 개의 커밋을 식별했습니다.
Michael Osofsky

미친 것 같은? 아마도. 그러나 bisect는 버그가 도입 된 위치를 찾는 데 도움이되는 좋은 방법이므로 어쨌든 배우는 것이 귀중한 기술입니다. 따라서 '올바른'또는 가장 '올바른'방법은 아니지만 여전히 좋은 아이디어이며 +1 가치가 있습니다!
Pryftan

77

bonyiii답변 ( 위로 올라옴 )과 " 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)의 실험 명령git restore(!)입니다.
따라서이 별칭의 이름을 바꿉니다 (아래 참조).


Robert Dailey 는 의견 에서 다음과 같은 별칭을 제안합니다 .

restore-file = !git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"

그리고 jegan 은 주석을 추가합니다 :

커맨드 라인에서 별칭을 설정하기 위해 다음 명령을 사용했습니다.

git config --global alias.restore "\!git checkout \$(git rev-list -n 1 HEAD -- \"\$1\")^ -- \"\$1\"" 

7
요청 된 파일뿐만 아니라 전체 커밋을 복원합니다.
Daniel Bang

5
여기 내 별명은 멋지고, 작품입니다 :restore-file = !git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
void.pointer

1
@RobertDailey 멋지다! 가시성을 높이기 위해 답변에 귀하의 별칭을 포함 시켰습니다.
VonC

1
명령 행에서 별명을 설정하기 위해 다음 명령을 사용했습니다.git config --global alias.restore "\!git checkout \$(git rev-list -n 1 HEAD -- \"\$1\")^ -- \"\$1\""
jegan

2
Expansion of alias 'restore' failed; '!git' is not a git command
Karl Morrison

55

파일 이름을 알고 있다면 기본 명령을 사용하는 쉬운 방법입니다.

해당 파일에 대한 모든 커밋을 나열하십시오.

git log -- path/to/file

마지막 커밋 (맨 위)은 파일을 삭제 한 커밋입니다. 따라서 마지막 커밋까지 두 번째를 복원해야합니다.

git checkout {second to last commit} -- path/to/file

이 솔루션을 방금 사용했으며 삭제 커밋이 없었습니다. 최신 커밋 ID를 사용하여 파일을 복원 할 수있었습니다.
Adam

다음에 마지막 커밋 (이전에 삭제 커밋)에 삭제 된 파일의 최신 버전이 포함되어 있지 않습니까? 마지막부터 끝까지 (이전에 삭제하기 전에 커밋 한) 커밋은 절망적 일 수 있습니다.
Suncat2000

1
이것이 내가 처음 본 솔루션으로, 다음에 다시 찾아 볼 필요가 없을 정도로 간단합니다. 아마도.
Eloff

@ Suncat2000 "두 번째에서 마지막으로"는 "다음에서 마지막으로 삭제"와 같은 "이전 삭제에 대한 커밋"을 의미합니다. en.wiktionary.org/wiki/penultimate#Synonyms
wisbucky

이 답변에 대한 zillion 시간 감사합니다 !!!!!
Rakesh Bk

29

삭제 및 커밋 된 파일을 복원하려면

git reset HEAD some/path
git checkout -- some/path

Git 버전 1.7.5.4에서 테스트되었습니다.


1
그것은 나를 위해 작동하지 않았다. 체크 아웃 후 error: pathspec 'foo' did not match any file(s) known to git.파일 이름이 올바른지 확인했습니다. 힘내 버전 2.7.0
wisbucky

-1; 이것은 잘못이다. 이 명령은 삭제 취소됩니다 아직 커밋되지 않은 (첫 번째는 그것의가 개최하는 경우, 삭제를 unstages, 파일에 두 번째 파기 unstaged 변경),하지만 당신은 그들이 복원거야 여기 주장하고 커밋을 파일 삭제는 단순히 사실이 아니며 위의 @wisbucky의 의견과 같은 오류로 실패합니다.
Mark Amery

@MarkAmery 실제로,이 명령은으로 제거 된 파일을 커밋하기 위해 명시 적으로 준비하지 않았지만 git add -A복원 된 파일이 아직 커밋되지 않은 단계에 있었던 개발자에게 효과적이라고 생각합니다 .
Fedir RYKHTIK

25

파일을 변경하고 삭제했지만 파일을 커밋하지 않은 경우 이제 변경 내용을 적용한 경우

git checkout -- .

삭제 된 파일이 반환되지 않으면 다음 명령 만 수행하면됩니다.

git checkout <file_path>

그리고 presto, 파일이 돌아 왔습니다.


24

이 솔루션을 가지고 있습니다 .

  1. 아래 방법 중 하나를 사용하여 파일이 삭제 된 커밋의 ID를 가져옵니다.

    • git log --grep=*word*
    • git log -Sword
    • git log | grep --context=5 *word*
    • git log --stat | grep --context=5 *word* # 기억이 나지 않는 경우 권장
  2. 다음과 같은 것을 얻어야합니다.

커밋 bfe68bd117e1091c96d2976c99b3bcc8310bebe7 저자 : Alexander Orlov 날짜 : Thu May 12 23:44:27 2011 +0200

replaced deprecated GWT class
- gwtI18nKeySync.sh, an outdated (?, replaced by a Maven goal) I18n generation script

커밋 3ea4e3af253ac6fd1691ff6bb89c964f54802302 저자 : Alexander Orlov 날짜 : Thu May 12 22:10:22 2011 +0200

3 . 이제 커밋 ID bfe68bd117e1091c96d2976c99b3bcc8310bebe7을 사용하십시오.

git checkout bfe68bd117e1091c96d2976c99b3bcc8310bebe7^1 yourDeletedFile.java

커밋 ID는 파일이 이미 삭제 된 커밋을 참조하므로 bfe68b 직전에 커밋을 참조해야합니다 ^1. 이것은 bfe68b 직전에 커밋을 제공한다는 것을 의미합니다.


이것은 허용되는 답변과 동일한 접근 방법이지만 삭제 커밋을 찾는 더 많은 방법이 있습니다. 나는 여전히 허용 된 답변에서 취한 접근법을 좋아하지만 이것들은 좋은 대안입니다. 감사!
avdgaag

먼저 삭제 된 파일을 체크 아웃 한 다음 (변경하지 않고) 커밋 하면 파일 사본 이 생성되지 않는다고 가정 합니다. 권리? (이미지로이 작업을 수행해야하고 복사본이 저장소를 더 크게 만들 것입니다)
Stonecrusher


12

git undelete path/to/file.ext

  1. 이것을 .bash_profile(또는 명령 셸을 열 때로 드되는 다른 관련 파일) 에 넣으십시오 .

    git config --global alias.undelete '!sh -c "git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1" -'
    
  2. 그런 다음 사용하십시오.

    git undelete path/to/file.ext
    

이 별칭은 먼저이 파일이 존재하는 마지막 커밋을 확인한 다음이 파일이 존재 한 마지막 커밋에서 해당 파일 경로의 Git 체크 아웃을 수행합니다. 소스 .


11

많은 경우, 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

다른 사람들이 내 앞에서 언급 한 것처럼.

이제 파일이 제거되기 전의 상태로 복원됩니다. 작업 트리를 유지하려면 작업 트리에 다시 커밋해야합니다.


7

특정 커밋에서 삭제 된 파일을 복원해야했고 두 가지 명령으로 파일을 관리했습니다.

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. 파일을 복원 한 다음 스테이지를 해제해야했습니다. 수백 개의 파일을 복원해야했으며 다른 예제에서와 같이 각 파일에 대해 수동으로 입력하는 것이 너무 느릴 것입니다.


7

실제로이 질문은 Git에 관한 것이지만 Git CLI 명령에 대한 지식 외에 WebStorm VCS 와 같은 GUI 도구를 사용하는 사람도 있습니다.

삭제 된 파일이 포함 된 경로를 마우스 오른쪽 버튼으로 클릭 한 다음 Git으로 이동 한 다음 내역 표시 를 클릭하십시오 .

여기에 이미지 설명을 입력하십시오

VCS 도구는 모든 개정 교육을 표시하며 각각의 커밋 및 변경 사항을 모두 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

그런 다음 친구가 PostAd.js파일을 삭제한다는 커밋을 선택 합니다. 이제 아래를 참조하십시오.

여기에 이미지 설명을 입력하십시오

이제 파일이 삭제 된 것을 볼 수 있습니다. 파일 이름을 두 번 클릭하면 복구됩니다.

여기에 이미지 설명을 입력하십시오

내 대답은 Git 명령이 아니라는 것을 알고 있지만 초보자와 전문 개발자에게는 빠르고 안정적이며 쉽습니다. WebStorm VCS 도구는 훌륭하고 Git 작업에 적합하며 다른 플러그인이나 도구가 필요하지 않습니다.


1
대단해! 감사합니다. JetBrains의 IDE를 사용하는 사람들에게 더 쉬운 솔루션입니다.
Fabiano Arruda

이미지 인 경우 어떻게 파일을 복원합니까?
Nodirabegimxonoyim 2016 년

@FabianoArruda님께, JetBrains IDE는 개발을위한 강력한 도구입니다. 당신의 사랑스러운 의견에 감사드립니다.
AmerllicA

에디션에 대한 @PeterMortensen에게 감사합니다.
AmerllicA

6

나는 같은 질문을했다. 그것을 모른 채 매달린 커밋을 만들었습니다 .

매달려있는 커밋 목록

git fsck --lost-found

매달린 커밋 검사

git reset --hard <commit id>

매달린 커밋으로 옮길 때 파일이 다시 나타납니다.

git status 이유 :

“HEAD detached from <commit id where it detached>”


2
대단히 감사합니다. 수천 줄의 코드를 복원하도록 도와주었습니다.
Reuben

5
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

2
문제는 파일을 삭제하고 변경 내용을 커밋 한 후 파일을 복원하는 것입니다. 이 답변은 작업 디렉토리에서만 제거 된 파일을 복원하는 것입니다.
akaihola

그것은 사실이며, 내가 찾던 것이 었습니다.
Hola Soy Edu Feliz Navidad

4

파일을 삭제 한 커밋을 알고있는 경우 파일을 삭제 한 커밋이있는 곳에서 다음 명령을 실행 <SHA1_deletion>하십시오.

git diff --diff-filter=D --name-only <SHA1_deletion>~1 <SHA1_deletion> | xargs git checkout <SHA1_deletion>~1 --

파이프 앞 부분에는 커밋에서 삭제 된 모든 파일이 나열됩니다. 그것들은 그것들을 복원하기 위해 이전 커밋에서 모두 체크 아웃됩니다.


4

파일을 삭제 한 커밋을 찾으십시오.

git log --diff-filter=D --oneline -- path/to/file | cut -f -d ' '

샘플 출력 :

4711174

Git 2.23부터는 실제로 restore명령이 있습니다. 는 아직 실험 은 다음 입력 할 수 있지만 (이 경우 4,711,174) 당신이 제거 뭔가 저지를 복원하기 위해 :

git restore --source=4711174^ path/to/file

(가) 주 ^ 우리가 커밋에서 뭔가를 복원하려는으로는 ID를 커밋 한 후 이전 파일을 삭제 한.

--source인수는 restore명령에 복원 할 파일을 찾을 위치를 알려주며 커밋 및 색인 일 수 있습니다.

참조 : git 2.23.0에 대한 git-restore doc


4

우리의 경우 실수로 커밋에서 파일을 삭제하고 나중에 커밋 한 후에 실수를 인식하고 삭제 된 파일은 모두 수정하고 싶었지만 수정하지는 않았습니다.

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)

2

간단하고 정확한

우선, 파일을 가지고있는 최신 안정적인 커밋을 얻으십시오-

git log 

$ commitid 1234567 ...을 찾은 다음

git checkout <$commitid> $fileName

그러면 해당 커밋에 있던 파일 버전이 복원됩니다.


1

가장 좋은 방법은 시도해보십시오.


먼저 파일을 삭제 한 커밋의 커밋 ID를 찾으십시오. 삭제 된 파일의 커밋 요약을 제공합니다.

자식 로그 --diff-filter = D-요약

자식 체크 아웃 84sdhfddbdddf ~ 1

참고 : 84sdhfddbddd당신입니다commit id

이를 통해 삭제 된 모든 파일을 쉽게 복구 할 수 있습니다.


1

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저장소로 복원되었습니다.


이 질문은 파일이 삭제 된 후 많은 커밋이 수행되었다고 가정하고 후속 커밋이 원치 않는다는 표시가 없으므로 설명 된 상황에서 OP에 도움이되지 않는 것 같습니다.
Jonathan Leffler

1
네! 후속 커밋을 수행하고 여전히 삭제 커밋을 되돌릴 수 있습니다. 111 삭제 파일을 커밋하고, 222 333, 444 커밋이 경우, 555 커밋 여전히 되돌리기 삭제를 취소 (111)를 저지 할 수 있으며이 될 것이다, 수정 것들 / 추가
데이브 Baghdanov

0

또한 아래 코드를 사용하여 이전 파일을 로컬 디렉토리로 검색하는 데 문제가 있습니다.

git checkout <file path with name>

아래 예제는 저에게 효과적입니다.

git checkout resources/views/usaSchools.blade.php


문제가 무엇인지 언급하십시오
Akbor

삭제가 이미 커밋되었습니다. 이 경우 복원 할 커밋을 지정해야합니다.
sba


-1

삭제가 커밋되지 않은 경우 아래 명령은 작업 트리에서 삭제 된 파일을 복원합니다.

$ git checkout -- <file>

아래 명령을 사용하여 작업 트리에서 삭제 된 모든 파일 목록을 얻을 수 있습니다.

$ git ls-files --deleted

삭제가 커밋 된 경우, 커밋이 발생한 위치를 찾은 다음이 커밋에서 파일을 복구하십시오.

$ git rev-list -n 1 HEAD -- <file>
$ git checkout <commit>^ -- <file>

복구 할 파일 경로를 찾는 경우 다음 명령은 삭제 된 모든 파일의 요약을 표시합니다.

$ git log --diff-filter=D --summary

-1

Git으로 삭제 된 파일을 모두 복원하려면 다음을 수행하십시오.

git checkout $(git ls-files --deleted)

여기서 git ls-files --deleted삭제 된 모든 파일을 나열하고 파일 git checkout $(git command)목록을 매개 변수로 복원합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.