질문자 :Emiliano
현재 작업 디렉토리에 세 개의 수정된 파일이 있습니다. 그러나 나는 그들 중 하나가 HEAD 상태로 재설정되기를 원합니다.
SVN에서는 svn revert <filename>
( svn update <filename>
)을 사용하지만 Git에서는 git reset --hard
합니다. 그러나 이 명령은 단일 파일에서 작동할 수 없습니다.
Git에서 단일 파일의 변경 사항을 취소하고 새 HEAD 복사본으로 덮어쓸 수 있는 방법이 있습니까?
다음 명령을 사용할 수 있습니다.
git checkout HEAD -- my-file.txt
my-file.txt
의 작업 복사본과 인덱스의 상태를 HEAD의 상태로 업데이트합니다.
--
기본적으로 의미: 이 지점 이후의 모든 인수를 파일 이름으로 취급합니다 . 이 답변에 대한 자세한 내용 . 이 점을 지적 해 주신 VonC 에게 감사드립니다.
Mark Longair머리로 재설정:
단일 파일을 HEAD로 하드 리셋하려면:
git checkout @ -- myfile.ext
@
HEAD
약자입니다. git의 이전 버전은 짧은 형식을 지원하지 않을 수 있습니다.
인덱스로 재설정:
단일 파일을 인덱스로 하드 리셋하려면 인덱스가 비어 있지 않다고 가정하고 그렇지 않으면 HEAD로 재설정합니다.
git checkout -- myfile.ext
요점은 안전을 위해 특별히 인덱스만 재설정하려는 경우가 아니면 명령에서 @
또는 HEAD
를 생략하고 싶지 않다는 것입니다.
AsclepiusGit 2.23 (2019년 8월)부터 restore
( 추가 정보 )을 사용할 수 있습니다.
git restore pathTo/MyFile
위의 내용은 HEAD
(마지막 커밋)에 있는 MyFile
을 복원합니다.
다른 커밋에서 변경 사항을 얻으려면 커밋 히스토리에서 뒤로 이동할 수 있습니다. 아래 명령은 마지막 커밋 이전에 MyFile
이제 소스를 복원할 때 master
(기본값)가 아닌 master~2
를 사용하기 때문에 -s
( --source
) 옵션이 필요합니다.
git restore -s master~2 pathTo/MyFile
다른 지점에서 파일을 가져올 수도 있습니다!
git restore -s my-feature-branch pathTo/MyFile
AxeEffect업스트림/마스터로 되돌리려면 다음을 수행하십시오.
git checkout upstream/master -- myfile.txt
Ann RaihoHEAD에 대한 참조는 필요하지 않습니다.
git checkout -- file.js
로 충분합니다.
Emanuel Friedrich단일 파일 재설정을 위해 아래 명령을 사용할 수 있습니다.
git checkout HEAD -- path_to_file/file_name
아래 명령 path_to_file/filename
을 얻으려면 변경된 모든 파일을 나열하십시오.
git status
HariKishore다음 명령을 사용할 수 있습니다.
git checkout filename
동일한 파일 이름을 가진 분기가 있는 경우 다음 명령을 사용해야 합니다.
git checkout -- filename
Milad Rahimi다음 명령을 사용할 수 있습니다.
git reset -- my-file.txt
추가될 때 my-file.txt
의 작업 복사본을 모두 업데이트합니다.
ADDYQU특히 git에 익숙하지 않은 경우 뜨거운 물에서 벗어나는 간단하고 쉬운 실습 방법:
파일 로그 보기
자식 로그 myFile.js
커밋 1023057173029091u23f01w276931f7f42595f84f 작성자: kmiklas 날짜: Tue Aug 7 09:29:34 2018 -0400
JIRA-12345 - 새로운 아키텍처로 리팩토링합니다.
파일의 참고 해시:
1023057173029091u23f01w276931f7f42595f84f
해시를 사용하여 파일을 표시합니다. 원하는 것인지 확인하십시오.
자식 쇼 1023057173029091u23f01w276931f7f42595f84f:./myFile.js
파일을 로컬 복사본으로 리디렉션
자식 쇼 1023057173029091u23f01w276931f7f42595f84f:./myFile.js > myFile.07aug2018.js
현재 파일을 백업하십시오.
cp myFile.js myFile.bak.js
좋아하는 텍스트 편집기에서 두 파일을 모두 엽니다.
vim myFile.js
vim myFile.07aug2018.js
myFile.07aug2018.js에서 myFile.js로 n' 붙여넣기 코드를 복사하고 저장합니다.
myFile.js 커밋 및 푸시
다시 로그를 보고 파일이 제 위치에 있는지 확인하십시오.
고객에게 최신 버전을 가져오도록 하고 이전 버전과 함께 작동하는 것을 기쁘게 지켜보십시오.
가장 섹시하거나 가장 git 중심적인 솔루션은 아니며 확실히 "수동" 재설정/복귀가 있지만 작동합니다. git에 대한 최소한의 지식이 필요하며 커밋 기록을 방해하지 않습니다.
kmiklas출처 : http:www.stackoverflow.com/questions/7147270/hard-reset-of-a-single-file