etc./StackOverFlow

단일 파일의 하드 리셋

청렴결백한 만능 재주꾼 2023. 4. 24. 06:48
반응형

질문자 :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 를 생략하고 싶지 않다는 것입니다.


Asclepius

Git 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 Raiho

HEAD에 대한 참조는 필요하지 않습니다.

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에 익숙하지 않은 경우 뜨거운 물에서 벗어나는 간단하고 쉬운 실습 방법:

  1. 파일 로그 보기

    자식 로그 myFile.js

    커밋 1023057173029091u23f01w276931f7f42595f84f 작성자: kmiklas 날짜: Tue Aug 7 09:29:34 2018 -0400

    JIRA-12345 - 새로운 아키텍처로 리팩토링합니다.

  2. 파일의 참고 해시:

    1023057173029091u23f01w276931f7f42595f84f

  3. 해시를 사용하여 파일을 표시합니다. 원하는 것인지 확인하십시오.

    자식 쇼 1023057173029091u23f01w276931f7f42595f84f:./myFile.js

  4. 파일을 로컬 복사본으로 리디렉션

    자식 쇼 1023057173029091u23f01w276931f7f42595f84f:./myFile.js > myFile.07aug2018.js

  5. 현재 파일을 백업하십시오.

    cp myFile.js myFile.bak.js

  6. 좋아하는 텍스트 편집기에서 두 파일을 모두 엽니다.

    vim myFile.js
    vim myFile.07aug2018.js

  7. myFile.07aug2018.js에서 myFile.js로 n' 붙여넣기 코드를 복사하고 저장합니다.

  8. myFile.js 커밋 및 푸시

  9. 다시 로그를 보고 파일이 제 위치에 있는지 확인하십시오.

  10. 고객에게 최신 버전을 가져오도록 하고 이전 버전과 함께 작동하는 것을 기쁘게 지켜보십시오.

가장 섹시하거나 가장 git 중심적인 솔루션은 아니며 확실히 "수동" 재설정/복귀가 있지만 작동합니다. git에 대한 최소한의 지식이 필요하며 커밋 기록을 방해하지 않습니다.


kmiklas

출처 : http:www.stackoverflow.com/questions/7147270/hard-reset-of-a-single-file

반응형