git에서 숨김 컨텐츠를 미리 볼 수 있습니까?


554

나는 종종 나중에 일을 끝내고 나서 다른 것들이 나오고 몇 주 후에 숨김을 검사하고 현재 상태의 작업 트리에 적용하면 어떤 변화가 있는지 알아 내고 싶습니다.

나는 숨김에서 git diff를 수행 할 수 있다는 것을 알고 있지만, 이것은 작업 트리와 숨김 사이의 모든 차이점을 보여 주지만, 숨김 적용이 무엇을 바꿀지 알고 싶습니다.

어떻게해야합니까?


1
colorized diff output : git stash show -p stash@{1} >~/.diff && vim ~/.diff( vim텍스트 편집기가 diff출력을 위한 구문 강조 기능을 지원하는 한 텍스트 편집기 일 필요는 없음 ).
Trevor Boyd Smith

답변:


727

git stash show가장 최근 숨김 상태에서 변경된 파일이 표시됩니다. -pdiff를 표시하는 옵션을 추가 할 수 있습니다 .

git stash show -p

관심있는 숨김이 최신이 아닌 경우, 명령 끝에 숨김 이름을 추가하십시오.

git stash show -p stash@{2}

그것은 좋아 보이고 매뉴얼에서 볼 수 있지만 시도 할 때 fatal: unable to create temp-file: Invalid argument왜 그런지 알 수 있습니까?
Benjol

29
git stash show -p stash@{0}특정 숨김을 보는 데 사용 하십시오. 0은 마지막 톤을 나타내고 1은 마지막 톤을 나타냅니다 git stash list.
brita_

6
PowerShell을 사용하는 경우 숨김 이름을 따옴표로 묶어야합니다. (예 : git stash show -p 'stash@{0}')
스캇 - 파스코


1
diff를 파일 사용에 저장하려면git stash show -p stash@{0}> stash.txt
S_K

87

현재 숨김 목록을 보려면

git stash list

다음과 같은 목록이 나타납니다.

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

해당 숨김에서 차이를 보려면 :

git stash show -p stash@{n}

34

gitkgit repos를 시각화하는의 그래픽 UI의 팬입니다 . 다음으로 보관 된 마지막 항목을 볼 수 있습니다.

gitk stash

으로 나열된 모든 숨김 변경 사항보기를 사용할 수도 있습니다 git stash list. 예를 들면 다음과 같습니다.

gitk stash@{2}

아래 스크린 샷에서 커밋 내역에서 왼쪽과 위쪽, 커밋 기록에서 언제 어디서 왔는지, 오른쪽 아래에서 수정 된 파일 목록 및 아래쪽의 줄별 차이로 숨김을 커밋으로 볼 수 있습니다 -왼쪽. 은신처가 여전히 숨겨져있는 동안.

은신처보기


5
stash@{X}커맨드 라인에 여러 값을 제공 하여 한 번에 더 많은 결과를 볼 수는 있지만 gitk에서 '모든 숨김 항목 표시'라고 말하는 간단한 방법을 찾지 못했습니다.
nobar

5
gitk stash의 약칭gitk stash@{0}
Leif Gruenwoldt

3
gitk에 모든 gitk `git stash list --pretty=format:%gd`숨김 을 표시하려면 사용 하고 "WIP on"을 검색하여 다음 숨김으로 이동할 수 있습니다.
Ikar Pohorský

2
gitk --reflog모든 스 태쉬 등을 볼 수 있습니다.
nobar

1
gitk는 숨김 파일에 저장되지 않은 파일이 저장되어 있음을 직접 보여주는 유일한 도구였습니다. 다른 모든 사람들은 저에게 "차이점"을 보여주었습니다.
Martin Bonner는 Monica

22

팝되지 않은 숨김에서 모든 변경 사항을 보려면 :

git stash show -p stash@{0}

팝되지 않은 숨김에서 한 특정 파일의 변경 사항을 보려면 :

git diff HEAD stash@{0} -- path/to/filename.php

파일 이름을 기억하지 못하는 경우 모든 파일에도 적용됩니다. git diff HEAD stash @ {0}
Simeon

명확성을 기하기 위해 : -p는 짧습니다 --patch. 옵션은에서 제공됩니다 git-diff. 긴 형식을 선호하면 작성할 수 있습니다 git stash show --patch.
Peterino

5

gitk 권장 사항을 넘어서서 git에서 숨김 컨텐츠를 미리 볼 수 있습니까? tig 를 설치 하고 호출 할 수 있습니다 tig stash. 이 무료 / 오픈 콘솔 프로그램을 통해 비교할 숨김을 선택할 수도 있습니다


1
여러 스 태쉬를 관리하기위한 완벽한 도구 인 것 같습니다! 및 키를 사용 하여 숨김을 드롭 할 수도 있습니다 . P!
Ikar Pohorský

TUI 대안은 항상 좋지만 이미 익숙하거나 선호하는 gitk 사람들에게는 모든 숨김을 표시하기 위해 해킹하는 것이 상대적으로 쉽습니다 .
1737973


4

이 질문을 처음 받았을 때, 이것은 선택 사항이 아니었지만 PyCharm을 사용하는 경우 UnStash Changes도구 (VCS-> Git-> UnStash Changes ...)를 사용할 수 있습니다 . 이를 통해 숨김 변경 목록을보고 팝, 드롭, 지우기 또는 적용 할 수 있습니다 (원하는 경우 새 브랜치에 적용).

변경 취소 창

숨김 당 변경된 파일을 봅니다.

영향을받는 경로 창

파일 당 diffs. diff에서는 개별 변경 사항을 체리 픽 선택하여 숨김 변경 사항에서 작업 브랜치에 적용 할 수 있습니다 (왼쪽 포인팅 셰브론 사용).

여기에 이미지 설명을 입력하십시오


3

다음 명령으로 모든 숨김 목록을 볼 수 있습니다.

$ git stash list

stash@{0}: WIP on dev: ddd4d75 spelling fix

stash@{1}: WIP on dev: 40e65a8 setting width for messages

......

......

......


stash@{12}: WIP on dev: 264fdab added token based auth

최신 은신처가 첫 번째입니다.

n위 목록에 제공된 숨김 색인 을 선택 하고 다음 명령을 사용하여 숨김 세부 사항을 볼 수 있습니다.

git stash show -p stash@{3}

비슷하게,

git stash show -p stash@{n}

다음 명령을 사용하여 diff를 확인할 수도 있습니다.

git diff HEAD stash@{n} -- /path/to/file

3

예, 수정 된 내용을 확인하는 가장 좋은 방법은 다음과 같은 파일로 저장하는 것입니다.

git stash show -p stash@{0} > stash.txt

2

먼저 git stash list를 사용하여 모든 숨김 항목을 가져올 수 있습니다.

$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...

그런 다음 git stash show stash@{N}특정 숨김 상태에서 파일을 확인하는 데 사용할 수 있습니다 N. 우리가 발사하면 다음을 얻을 수 있습니다.

$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

그 이유는 껍질이 중괄호를 먹고 git sees가 stash@2아닌 것을보고 있기 때문일 수 있습니다 stash@{2}. 그리고이 문제를 해결하려면 중괄호에 작은 따옴표를 사용해야합니다.

git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml                     | 16 ++++++++--------
com/java/myproject/MyJavaClass.java                    | 16 ++++++++--------
etc.

2

숨김 변경 사항 목록보기

git stash list

특정 숨김에서 변경된 파일 목록을 보려면

git stash show -p stash@{0} --name-only

숨김 파일에서 특정 파일을 보려면

git show stash@{0} path/to/file

1

모든 숨김 표시

파일 이름 만 :

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show $i; done

모든 숨김에서 전체 파일 내용 :

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show -p $i; done

space ( forward ) 및 b( reverses )로 q페이징하고 현재 스 태쉬의 페이저를 닫을 수있는 컬러화 된 diff 출력을 얻을 수 있습니다 . 파일에 파일이 있으면 > stashes.diff명령에 추가 하십시오.


1

사용을 제안하는 기존 답변 외에도 (마지막으로 세 번째 숨김의 차이를 표시하기 위해)

git stash show -p stash@{2}

에 참고 git-stash문서 ,이 것을 기록

스 태시는 스 태시 인덱스 만 지정하여 참조 할 수도 있습니다 (예 : 정수 nstash@{n}).

따라서 사용할 수도 있습니다 (이것은 위의 명령과 동일합니다)

git stash show -p 2

또한 일부 Powershell 문제를 피해야 합니다 .


1

나는 gitk추적되지 않았거나 인덱스에 앉아있는 것을 정확하게 보여줄 수있는 방법 을 좋아 하지만 기본적으로 현재 분기에있는 다른 모든 커밋의 중간에 숨어있는 "커밋"을 표시합니다.

트릭은 다음과 같이 gitk를 실행하는 것입니다.

gitk "stash@{0}^!"

인용 부호는 Powershell에서 작동하도록하지만이 방법으로 다른 쉘에서도 작동해야합니다.

gitrevisions 도움말 페이지 에서이 구문을 찾으면 다음을 찾을 수 있습니다.

r1^!표기법에는 커밋 r1이 포함 되지만 모든 부모는 제외됩니다. 자체적으로이 표기법은 단일 커밋 r1을 나타냅니다 .

이것은 분명히 선택된 커밋의 직계 부모만이 보여주는 모드로 gitk를 넣을 것입니다.


이것을 더 취하고 모든 숨김을 나열하려면 다음을 실행할 수 있습니다.

gitk `git stash list '--pretty=format:%gd^!'`

(배시를 달래려면 백틱 안에 작은 따옴표가 필요합니다. 그렇지 않으면 느낌표에 대해 불평합니다)

Windows에 있고 cmd 또는 Powershell을 사용하는 경우 :

gitk "--argscmd=git stash list --pretty=format:%gd^!"

0

다음 명령을 사용하여 다른 숨김, 커밋 또는 분기 또는 HEAD 중에서 숨김 변경의 차이를 다시 추출 할 수 있습니다.

git stash show
git show
git diff
git difftool

위에서 언급 한 각 명령을 사용하는 방법을 살펴 보겠습니다.

  1. 자식 숨김 쇼

간단한 명령 인 git stash show는 파일 변경 사항에 대한 간략한 요약을 제공하지만 현재 HEAD에 대한 변경 내용의 차이는 표시하지 않습니다.

  1. 자식 쇼

git-show 명령은 다양한 유형의 객체를 보는 데 사용됩니다.

git-show 명령은 숨김 변경을 시각화하는 데 사용될뿐만 아니라 얼룩, 트리, 태그 및 커밋과 같은 하나 이상의 객체를 보는데도 사용됩니다.

  1. 자식 차이

git-diff 명령은 커밋, 커밋 및 작업 트리 등의 변경 사항을 표시하는 데 사용되는 일반적인 명령 중 하나입니다.

기본적으로 git diff는 다른 숨김 참조 또는 커밋이 지정되지 않은 한 저장소의 현재 상태에 대해 선택된 숨김의 diff (수정 된 파일)를 표시합니다.

최상위 숨김 stash @ {0}과 마스터 분기의 차이를 얻으려면 다음을 수행하십시오.

$ git diff stash @ {0} 마스터

변경 내용이 다르지 않은 파일 이름 만 표시하십시오.

$ git diff --name-only stash @ {0} 마스터

선택된 파일에 대해 선택된 스 태쉬 사이의 차이점을 참조하십시오.

$ git diff stash @ {0} ^ 1 stash @ {0}-

  1. 자식 difftool

git-difftool 명령을 사용하여 선택된 숨김과 선택된 커밋 또는 분기 또는 숨김 사이의 차이점을 찾을 수도 있습니다.

최신 두 스 태쉬의 차이점을 확인하십시오.

$ git difftool stash @ {0} stash @ {0} ^ 1

자식 difftool --dir-diff stash @ {0} stash @ {0} ^ 1

요약:

선택된 stash git stash show, git show, git diff, git difftool에서 diff를 추출하는 데 유용한 명령입니다.

git stash show 명령을 사용하여 차이점을 확인하십시오.

git stash show -p stash @ {0}

git show 명령을 사용하여 숨김의 변경 사항을 확인하십시오.

git show stash @ {1}

git diff 명령을 사용하여 최신 숨김과 선택된 커밋의 차이점을 확인하십시오.

git diff stash @ {0}

참고 문헌 :

https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/

https://git-scm.com/docs/git-show

https://git-scm.com/docs/git-stash

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.