자식의 이전 커밋에서 파일 복원


답변:


222
git checkout 'master@{7 days ago}' -- path/to/file.txt

이것은 HEAD를 변경하지 않고 로컬 파일을 덮어 씁니다. path/to/file.txt

가능한 개정 사양 은 man git-rev-parse 를 참조하십시오 (물론 간단한 해시dd9bacb :)가 훌륭하게 수행됩니다)

변경 사항을 커밋하는 것을 잊지 마십시오 (검토 후 ...)


15
와, @heneryville과 sehe, 나는 실제로 '7 일 전'이 당신이 무엇을 저지르는 지 알아 내기 위해 메타라고 생각했습니다. 타이!
AnneTheAgile

7
2 부 특정 커밋을 선택하고자 할 때 위 형식이 작동하지 않습니다. 경로 /로 / file.txt를 당 - 대신 우르스는 아래의 자식 체크 아웃 commitShaNumber 보여 무엇을 사용 stackoverflow.com/questions/215718/...
AnneTheAgile

2
@AnneTheAgile 사실은 여전히 ​​똑같은 구문이지만, 방금 revision-specificationOP의 질문 인 "복잡한"예를
들었습니다.

1
커밋을 사용하여 복구하려는 파일을 삭제 한 경우 shacommit~1(ex :)를 사용 git checkout 0f4bbdcd~1 -- path/to/file.txt하여 커밋을 즉시 가져옵니다.
sdlins

90
  1. 이전 커밋에서 파일을 통해 확인하십시오. git checkout [Revision_Key] -- path/to/file .
  2. 적절하게 추가, 커밋, 푸시합니다.

3
git checkout단일 파일을 처리 할 수 ​​있으며 (sehe의 답변 참조) 복사하여 붙여 넣을 필요가 없습니다.
Koraktor

1
수정 키는 항상 커밋에 대한 SHA1입니까?
IslandCow

1
그러나 SHA1의 첫 6-8 자이면 개정을 식별하기에 충분합니다.
Urs Reupke

2
어떤 @IslandCow, 그들은 SHA1뿐만 아니라 지점, 태그, 또는 포인트가 커밋 다른 것, 예를 들면 할 수있다 HEAD, ORIG_HEAD또는 함께 이들의 ^/ ~/ @스타일 표기법.
Alois Mahdal

2
나중에 파일을 "추가"해야한다는 것을 나타냅니다. 그러나 그것은 틀렸다. 파일이 준비 영역에 배치되지 않습니다. 이미 추가되었습니다.
xApple

9

git에 커밋 된 최근 파일을 복원해야했습니다. 따라서 반복하고 다른 관점을 제시하려면 다음 두 단계를 실행하여이를 수행해야합니다.

  1. git log -3
    가장 최근의 커밋 3 개를 보여줍니다. 의견과 저자 이름을 읽으면 원하는 정확한 버전을 좁힐 수 있습니다. 원하는 커밋 버전에 대한 긴 커밋 ID (예 : b6b94f2c19c456336d60b9409fb1e373036d3d71)를 기록하십시오.

  2. git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71-myfile.java
    커밋 ID와 복원하려는 파일 이름을 전달하십시오. 이중 하이픈 앞뒤에 공백이 있는지 확인하십시오.

다른 많은 방법이 있습니다. 그러나 이것은 내가 기억할 수있는 가장 간단한 것입니다. 희망이 도움이됩니다.

참고 : 프로젝트 경로 / 폴더 내부에있는 경우 checkout 명령에 전체 파일 경로를 입력 할 필요가 없습니다.


최고의 의견. 허용되는 답변 인 파일은 가져와야하는 파일이 업스트림으로 푸시된다고 가정하기 때문에이 명령은 로컬에만 존재하는 파일을 가져 오거나 복원합니다.
ot0

1
로컬 git repo의 루트 폴더에서 이것을 시도했습니다. 여전히 파일의 상대 경로를 제공해야했습니다. 자체적으로-[filename]을 제공하는 것은 효과가 없었습니다.
user2784627

@ ot0 아니요, 가정하지 않습니다. 그들은 정확히 같은 대답입니다.
매트

4

모든 답변은 언급 git checkout <tree-ish> -- <pathspec>합니다. git v2.23.0부터는 새로운 git restore 메소드 git checkout가있어 책임이있는 부분을 ​​가정 합니다. github 블로그의 주요 변경 사항보기 .

이 명령의 기본 동작은 작업 트리에서 나오는 내용으로 작업 트리의 상태를 복원하는 것입니다. source 매개 변수 (커밋 해시) 것입니다.

커밋 해시를 가정하면 abcdef명령은 다음과 같습니다.

git restore --source=abcdef file_name

기본적으로 작업 트리에 넣습니다. 변경 사항을 색인에 직접 저장하여 즉시 커밋 할 수있는 경우 :

git restore --source=abcdef --worktree --staged file_name

또는 짧은 옵션 이름으로 :

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