답변:
온 자식 숨김 맨 당신은 (그냥 "옵션"설명을 한 후, "토론"섹션에서) 읽을 수 있습니다 :
스 태시는 트리가 작업 디렉토리의 상태를 기록하는 커밋으로 표시되며 첫 번째 상위는 스 태시가 작성 될 때 HEAD의 커밋입니다.
따라서 숨김 (예 : stash@{0}첫 번째 / 맨 위 숨김)을 병합 커밋으로 취급하고 다음을 사용할 수 있습니다.
$ git diff stash@{0}^1 stash@{0} -- <filename>
설명 : stash@{0}^1주어진 숨김의 첫 번째 상위를 의미하며, 위 설명에서 설명한대로 변경 사항이 무시 된 커밋입니다. stash@{0}/ refs/stash는 머지 커밋 이기 때문에이 형식의 "git diff"(두 개의 커밋 포함)를 사용 하며 git에게 어떤 부모를 비교할 것인지 알려 주어야합니다. 더 비밀스러운 :
$ git diff stash@{0}^! -- <filename>
작동해야합니다 ( "범위 지정"섹션 의 구문에 대한 설명 은 git rev-parse 맨 페이지를 참조하십시오 rev^!).
마찬가지로 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}'.
git checkout의 맨 페이지를 다시 확인했습니다. 파일을 다른 위치에 놓을 수 없습니다. 이에 대한 참조는 stackoverflow.com/questions/888414/…
git checkout접근 방식 은 숨김 파일에서 정확한 파일을 복사합니다 git stash apply. 작업 디렉토리에있는 파일과 병합되지 않습니다 . (따라서 스 태쉬가 작성된베이스에서 변경 사항이 있으면 손실됩니다.)
git stash apply파일이 은닉 된 이후에 작업 트리에 수정 된 파일의 변경 내용을 병합하는, 작업 트리에서 해당 파일이 개최되어야한다. 자동 병합이 작동하려면 작업 사본과 병합 될 병합 사본에서 동일한 파일을 수정할 수 없습니다. 마지막으로 숨김 적용은 숨김에서 항목을 제거하지 않습니다 git stash pop.
git stash apply대신에 사용하면 git stash pop작업 트리에 숨김을 적용하지만 여전히 숨김을 유지합니다.
이 작업이 완료, 당신은 수 add/ commit파일이 당신이 원하는 다음 나머지 변경 내용을 다시 설정.
git stash pop stash@{0}(목록 은닉 변경 git stash list)
스 태쉬를 포함하여 모든 브랜치에서 변경 사항을 얻는 쉬운 방법이 있습니다.
$ git checkout --patch stash@{0} path/to/file
여러 부분으로 패치하려는 경우 파일 사양을 생략 할 수 있습니다. 또는 단일 파일에 대한 모든 변경 사항을 가져 오려면 패치 (경로는 아님)를 생략하십시오. 교체 0에서 숨김 번호 git stash list는 하나 이상있는 경우. 이와 같 으며 분기 간의 모든 차이점 diff을 적용 할 수 있습니다. 단일 커밋 / 스 태시에서만 변경 사항을 얻으려면를 살펴보십시오 .git cherry-pick --no-commit
git help checkout. --patch대화식 병합, 쉘에서 승인 한 모든 덩어리 (또는 e패치 를 제거하기로 선택한 경우 저장 한 모든 것 )를 적용합니다. 경로만으로 "모든 변경 사항"을 쓴 것처럼 파일을 덮어 씁니다.
git config --global alias.applydiffat '!git checkout --patch "$1" -- $(git diff --name-only "$1"^ "$1")' -그런 다음 git applydiffat stash@{4}숨김과 부모 사이에서 변경된 파일 만 사용합니다.
전체 파일을 보려면 git show stash@{0}:<filename>
diff를 보려면 git diff stash@{0}^1 stash@{0} -- <filename>
diff와 함께 difftool당신의 마음에 드는 외부 DIFF을 사용합니다.
$ git checkout stash@{0} -- <filename>
노트:
"-" 와 파일 이름 매개 변수 뒤에 공백 을 두십시오.
0 (0)을 특정 숨김 번호로 바꾸십시오. 숨김 목록을 얻으려면 다음을 사용하십시오.
git stash list
Jakub Narębski의 답변을 바탕으로 -짧은 버전
비록 가장 좋은 것은 아니지만 이해하기위한 가장 간단한 개념은 세 개의 파일이 변경되었고 하나의 파일을 숨기고 싶다는 것입니다.
당신이 경우에 git stash, 그들 모두를 은닉하기 위해 git stash apply다시하고 다시을 가지고 git checkout f.c에 문제의 파일에 효율적으로 다시 설정합니다.
해당 파일 실행을 해제하려는 경우 a를 수행 한 git reset --hard다음 git stash apply다시 실행 git stash apply하여 숨김 스택에서 diff를 지우지 않는 사실을 이용하십시오 .
숨김 파일이 현재 버전과 병합되어야하는 경우 diff를 사용하여 이전 방법을 사용하십시오. 그렇지 않으면 파일 git pop을 숨김 해제 git add fileWantToKeep하거나 파일을 준비 git stash save --keep-index하고 무대에있는 것을 제외한 모든 것을 숨기는 데 사용할 수 있습니다 . 이 방법과 이전 방법의 차이점은 파일을 숨김에서 "팝핑"한다는 것입니다. 이전 답변 git checkout stash@{0} -- <filename>은 필요에 따라 유지됩니다 .
Visual Studio Code 에서 Git Stash 확장 사용