답변:
추적되지 않은 파일은 숨김 커밋의 세 번째 부모에 저장됩니다. (이것은 실제로 문서화 아니지만, 꽤 분명하다에서 에 -u 기능, 787,513 ... 소개하는 커밋 하고 끝까지 설명서의 나머지git-stash
문구의 일을 ... 아니면 그냥 수행하여 git log --graph stash@{0}
)
다음을 통해 숨김의 "추적되지 않은"부분 만 볼 수 있습니다.
git show stash@{0}^3
또는 다음을 통해 "추적되지 않은"트리 자체 만 :
git show stash@{0}^3:
또는 다음을 통해 트리의 특정 "추적되지 않은"파일 :
git show stash@{0}^3:<path/to/file>
안타깝게도 모든 staged + unstaged + untracked와 "current"상태 간의 차이점을 요약 할 수있는 좋은 방법은 없습니다. 즉 : git show stash@{0}
추적되지 않은 파일을 포함하도록 만들 수 없습니다. 라고하는 숨김 커밋 자체의 트리 개체 stash@{0}:
에는 세 번째 "무단계"부모의 변경 내용이 포함되지 않기 때문입니다.
이는 보관함이 다시 적용되는 방식 때문입니다. 추적 된 파일은 패치로 쉽게 적용 할 수있는 반면 추적되지 않은 파일은 이론상 "전체 파일"로만 적용 할 수 있습니다.
git log --graph --topo-order -m -u
. matthewlmcclure.com/s/2014/01/10/…
fatal: ambiguous argument 'stash@{0}^3': unknown revision or path not in the working tree.
경우 (하지만 그렇게 생각한 경우) 추악한 오류 ( )가 표시됩니다 .
git stash show
않습니다 하지 (적어도 자식 2.7.4 마찬가지) 비 추적 파일을 보여줍니다
git stash pop
먼저 추적되지 않은 파일 복원을 시도한 다음 추적 된 파일 복원을 시도합니다. 후자의 작업이 실패하면 (예 : 충돌) 첫 번째 작업은 롤백되지 않습니다 (추적되지 않은 파일 숨김은 그대로 유지되지만 파일은 디스크에서 제거되지 않음). 충돌을 수정하더라도 다음 팝은 실패합니다. 어쨌든.
다음 명령을 사용하여 모든 숨김 커밋을 나열 할 수 있습니다.
git rev-list -g stash
스 태시는 HEAD의 3 방향 병합 커밋, 인덱스 및 추적되지 않은 파일의 부모없는 "루트"커밋으로 표시되므로 위의 출력을 다음으로 파이프하여 추적되지 않은 파일 스 태시를 나열 할 수 있습니다.
git rev-list -g stash | git rev-list --stdin --max-parents=0
위의 유용한 응용 프로그램 :
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat
물론 --stat
파일의 내용을 보려면를 제거 하십시오.
git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep <pattern>
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep <pattern>
git rev-list -g stash | git rev-list --stdin | xargs git show --stat
숨김에있는 추적되지 않은 파일을 나열하려면 :
git ls-tree -r stash@{0}^3 --name-only
추적되지 않은 모든 파일 (콘텐츠 포함)의 전체 차이점을 표시하려면 :
git show stash@{0}^3
이 명령은 마지막 (가장 최근) 숨김을 읽습니다. 이전 보관함의 경우 "stash @"뒤의 숫자를 stash@{2}
늘립니다 ( 예 : 마지막 보관함의 두 번째 보관함).
이유이 작품 즉 git stash
병합 같이 참조 될 수있는 각각의 은닉, 커밋 만들고 stash@{0}
, stash@{1}
이를 제 부모가 은닉시의 HEAD 커밋 등 번째 상위 추적 파일에 대한 변경을 포함하고, 세 번째 (존재하지 않을 수 있음)는 추적되지 않는 파일의 변경 사항입니다.
숨김에있는 모든 파일 (추적 및 추적되지 않음)을 보려면이 별칭을 내 구성에 추가했습니다.
showstash = "!if test -z $1; then set -- 0; fi; git show --stat stash@{$1} && git show --stat stash@{$1}^3 2>/dev/null || echo No untracked files -"
보려는 숨김에 대한 단일 인수 가 필요합니다. 여전히 두 개의 연속 목록에 표시됩니다.
if...fi
부분은 bash는 인수를 변경 아무것도 전달되지 않은 경우 0으로 $ 1.
git stash show
작업 복사본과 # 1 (git diff ${FLAGS:---stat} $b_commit $w_commit
$ b_commit이 # 1이고 $ w_commit이 숨김 커밋 인 git-stash.sh :의 관련 코드) 사이의 차이점을 보여주는 것처럼 보입니다 .git stash show
# 3도 포함 하는 내장 방법이 있습니까?