숨김 변경 세트를 팝하지 않고 git stash에서 단일 파일 또는 파일의 diff를 추출 할 수 있는지 알고 싶습니다.
누구든지 이것에 대한 제안 / 아이디어를 제공 할 수 있습니까?
답변
온 자식 숨김 맨 당신은 (그냥 “옵션”설명을 한 후, “토론”섹션에서) 읽을 수 있습니다 :
스 태시는 트리가 작업 디렉토리의 상태를 기록하는 커밋으로 표시되며 첫 번째 상위는 스 태시가 작성 될 때 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 stash apply
대신에 사용하면 git stash pop
작업 트리에 숨김을 적용하지만 여전히 숨김을 유지합니다.
이 작업이 완료, 당신은 수 add
/ commit
파일이 당신이 원하는 다음 나머지 변경 내용을 다시 설정.
답변
스 태쉬를 포함하여 모든 브랜치에서 변경 사항을 얻는 쉬운 방법이 있습니다.
$ git checkout --patch stash@{0} path/to/file
여러 부분으로 패치하려는 경우 파일 사양을 생략 할 수 있습니다. 또는 단일 파일에 대한 모든 변경 사항을 가져 오려면 패치 (경로는 아님)를 생략하십시오. 교체 0
에서 숨김 번호 git stash list
는 하나 이상있는 경우. 이와 같 으며 분기 간의 모든 차이점 diff
을 적용 할 수 있습니다. 단일 커밋 / 스 태시에서만 변경 사항을 얻으려면를 살펴보십시오 .git cherry-pick --no-commit
답변
짧은 답변
전체 파일을 보려면 git show stash@{0}:<filename>
diff를 보려면 git diff stash@{0}^1 stash@{0} -- <filename>
답변
$ git checkout stash@{0} -- <filename>
노트:
-
“-“ 와 파일 이름 매개 변수 뒤에 공백 을 두십시오.
-
0 (0)을 특정 숨김 번호로 바꾸십시오. 숨김 목록을 얻으려면 다음을 사용하십시오.
git stash list
Jakub Narębski의 답변을 바탕으로 -짧은 버전
답변
” git show stash@{0}
” 를 사용하여 숨김에 대한 diff를 얻을 수 있습니다 (또는 숨김 수에 관계없이 “git stash list”참조). 단일 파일의 diff 섹션을 쉽게 추출 할 수 있습니다.
답변
비록 가장 좋은 것은 아니지만 이해하기위한 가장 간단한 개념은 세 개의 파일이 변경되었고 하나의 파일을 숨기고 싶다는 것입니다.
당신이 경우에 git stash
, 그들 모두를 은닉하기 위해 git stash apply
다시하고 다시을 가지고 git checkout f.c
에 문제의 파일에 효율적으로 다시 설정합니다.
해당 파일 실행을 해제하려는 경우 a를 수행 한 git reset --hard
다음 git stash apply
다시 실행 git stash apply
하여 숨김 스택에서 diff를 지우지 않는 사실을 이용하십시오 .