자식 숨김에서 단일 파일 (또는 파일 변경)을 어떻게 추출합니까? 단일 파일 또는 파일의 diff를 추출

숨김 변경 세트를 팝하지 않고 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>

노트:

  1. “-“ 와 파일 이름 매개 변수 뒤에 공백두십시오.

  2. 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를 지우지 않는 사실을 이용하십시오 .