개발관련/Git

git stash에서 단일 파일 (또는 파일 변경)을 추출하는 방법

Rateye 2021. 12. 6. 09:52
728x90
반응형
질문 : git stash에서 단일 파일 (또는 파일 변경)을 어떻게 추출합니까?

숨김 변경 집합을 해제하지 않고 git 숨김에서 단일 파일 또는 파일의 diff를 추출 할 수 있는지 알고 싶습니다.

누구든지 이것에 대한 몇 가지 제안 / 아이디어를 제공 할 수 있습니까?

답변

git stash 맨 페이지에서 다음 내용을 읽을 수 있습니다 ( "토론"섹션, "옵션"설명 바로 뒤에 있음).

숨김은 트리가 작업 디렉토리의 상태를 기록하는 커밋으로 표시되며 첫 번째 부모는 숨김이 생성되었을 때 HEAD의 커밋입니다.

따라서 stash (예 : stash@{0} 는 첫 번째 / 최상위 숨김)를 병합 커밋으로 처리하고 다음을 사용할 수 있습니다.

$ git diff stash@{0}^1 stash@{0} -- <filename>

설명 : stash@{0}^1 은 주어진 숨김의 첫 번째 상위를 의미하며, 위의 설명에 명시된 바와 같이 변경 사항이 숨겨지는 커밋입니다. stash@{0} / refs/stash 는 병합 커밋이고 비교하려는 부모를 git에게 알려야하기 때문에이 형식의 'git diff'(커밋 2 개 포함)를 사용합니다. 더 비밀스러운 :

$ git diff stash@{0}^! -- <filename>

또한 작동해야합니다 ( "범위 지정"섹션 rev^! 구문에 대한 설명 은 git rev-parse 맨 페이지 참조).

마찬가지로 git checkout 을 사용하여 숨김에서 단일 파일을 확인할 수 있습니다.

$ git checkout stash@{0} -- <filename>

또는 다른 파일 이름으로 저장하려면 :

$ git show stash@{0}:<full filename>  >  <newfile>

또는

$ git show stash@{0}:./<relative filename> > <newfile>

(주는 여기에 <전체 파일 이름> 프로젝트 (생각의 최상위 디렉토리에 파일 상대의 전체 경로 이름입니다 : 상대 stash@{0} )).

셸 확장 stash@{0} 를 보호해야 할 수 있습니다 ( "stash@{0}" 또는 'stash@{0}' .

출처 : https://stackoverflow.com/questions/1105253/how-would-i-extract-a-single-file-or-changes-to-a-file-from-a-git-stash
728x90
반응형