답변:
온 자식 숨김 맨 당신은 (그냥 "옵션"설명을 한 후, "토론"섹션에서) 읽을 수 있습니다 :
스 태시는 트리가 작업 디렉토리의 상태를 기록하는 커밋으로 표시되며 첫 번째 상위는 스 태시가 작성 될 때 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 확장 사용