git stash create로 생성 된 숨김을 삭제하는 방법은 무엇입니까?


549

Git stash는 변경 사항이 없으면 git stash; git stash pop저장소에 변경 사항이있는 경우와 다른 것을 수행 하므로 스크립트하기가 약간 어렵다는 것을 제외하고는 내가 원하는 많은 것을하는 것 같습니다 .

그것은 git stash create그 문제에 대한 해답이며, 한 가지를 제외하고는 모든 것이 작동합니다 ... 나는 생성 된 숨김을 제거 할 수 없습니다. 숨김을 제거 할 수있는 방법이 있습니까?

내가하고있는 일을 100 % 명확하게하려면 :

숨김을 작성하십시오.

~/tmp/a(master) $ git stash create 
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message

숨김을 사용하십시오.

~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#

숨김을 삭제하십시오 (이 마지막 비트가 작동하지 않는 것을 제외하고)

~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference

시간이 지났음에도 불구 git apply하고이 글을 쓰는 시점에서 두 번째 코드 상자에서 실행하면 패치가 적용되지 않았 음 을 동료 여행자에게 지적하고 싶습니다 . 출력의 오류 메시지가이를 알려줍니다. 실제로, 당신은 숨김을 만들려고했는데 (작동하지 않았으며 아래 주석 참조) 생성되지 않은 숨김을 적용 한 다음 생성되지 않은 숨김을 삭제하십시오. 이것이 당신이 한 일이없는 이유입니다.
Tom

1
@ProfessorTom 숨김이 생성되었으므로 해시 코드를 반환 한 이유와 git stash apply작동 한 이유 입니다. git apply시도는 존재하지 않는 로컬 패치 파일을 읽을 수 있습니다. 솔직히 말하면 아마도 거기에 있으면 안되며 결코 작동하지 않았을 것입니다. 나는 질문에서 그것을 제거하려는 막연한 유혹을 받고 있지만 그것이 현재의 많은 형태로 도움이되었다는 것을 감안할 때 나는 그것을 그대로 둘 것입니다.
Paul Wagland

답변:


367

로 만든 일반 숨김을 삭제하려면 또는을 ( git stash를) 원합니다 . 자세한 내용은 아래를 참조하십시오.git stash dropgit stash drop stash@{n}


로 만든 숨김을 삭제할 필요가 없습니다 git stash create. 문서에서 :

일반 커밋 객체 인 숨김 항목을 만들고 ref 네임 스페이스의 아무 곳에 나 저장하지 않고 객체 이름을 반환합니다. 스크립트에 유용합니다. 사용하려는 명령이 아닐 수도 있습니다. 위의 "저장"을 참조하십시오.

숨김 커밋을 참조하는 것은 없으므로 결국 가비지 수집이 수행됩니다.


git stash또는로 만든 숨김git stash save은 (으) 저장하며 refs/stash로 삭제할 수 있습니다 git stash drop. 모든 Git 객체와 마찬가지로 실제 숨김 콘텐츠는 gc만료 된 후 객체를 정리할 때까지 컴퓨터에서 삭제되지 않습니다 (기본값은 2 주 후).

이전에 숨겨 놨다는에 저장됩니다 refs/stash reflog (시도 cat .git/logs/refs/stash), 및 삭제할 수 있습니다 git stash drop stash@{n}경우, n수가으로 표시됩니다 git stash list.


20
공식적인 질문에 대답하지 않습니다. 결과적으로 나 같은 사람들은 Google을 통해 질문에 대한 답변을 검색하고 실제 세부 사항을 신경 쓰지 않고 실제로 질문에 답변 한 사람에게 투표합니다. 일부 사람들은 또한 도움이되지 않기 때문에 허용 된 답변에 투표를합니다. 나는 개인적으로 나에게 도움이되는 답변을 공표했다.
ArtOfWarfare

15
따라서 : 1) Google "git delete stash"2) 질문 제목의 전반을 기준으로 SO 링크를 클릭하십시오. 3) 제목의 후반에 맞는 정답을 공감하십시오. 그것은 새로운 것입니다.
dahlbyk

10
@ArtOfWarfare 그것은 "독점적 질문"에 대한 응답이기 때문에 읽기 이해력이 부족할 것입니다.
Chris Hayes

1
그럴 수 있지. 나는 단지를 사용하여 스 태시를 만듭니다. git stash실제로 git stash create다른 맵에 매핑되는지 알 수 없습니다 . 힘내는 확실히 뭔가 아직도 대해 배우고 있습니다 (이 아니었다면 나는이 같은 Q & A를 읽기되지 않을 것이다.)
ArtOfWarfare

1
@AdrianPronk 이것은 실제로 내가 실제로 사용 git stash create하는 것이 좋습니다 . 타임 스탬프가 지정된 패치 파일에 저장하는 대신 git reflog가이를 사용자 지정 참조 (예 :)에 저장하도록 할 수 있습니다 refs/backup. 나는 1) git stash create, 2) 새로운 숨김 나무를 refs/backup^{tree}, 3) 나무가 다른 경우 와 비교해 보십시오 git update-ref --create-reflog refs/backup <stash-sha>. 결국 오래된 백업 스 태시는 자동으로 정리됩니다.
dahlbyk 2016 년

838

git stash drop매개 변수를 사용하지 않습니다-상단 숨김을 삭제하거나 다음과 같은 숨김 참조 stash@{n}n지정합니다. 에 커밋 ID를 전달할 수 없습니다 git stash drop.

git stash drop            # drop top hash, stash@{0}
git stash drop stash@{n}  # drop specific stash - see git stash list

숨김을 삭제 하면 스택 아래로 모든 숨김 의 지정 이 변경 됩니다 stash@{n}.

stash create숨김 항목을 사용 하는 경우 "스 태쉬"에 대해 작성되지 않으므로 삭제할 항목이 없기 때문에 왜 숨김을 삭제해야한다고 생각하는지 잘 모르겠습니다 .


글은 "stash"를 사용하여 생성됩니다… 논리적으로 "stash"를 사용하여 제거 할 것이라고 생각합니다.
Paul Wagland

2
git stash에 대한 매뉴얼 페이지를 참조하십시오. stash create는 항목을 작성하지 않으며 숨김에 대한 커미트 오브젝트 만 제거하므로 숨김 로그에 제거 할 항목이 없습니다.
CB Bailey

3
사람에서 : 생성 및 심판 네임 스페이스에 어디를 저장하지 않고, 그 객체의 이름을 반환 (일반 객체를 커밋이다) 은닉을 만듭니다.
ruffin

40
주의 : 실제로 1, 3 및 5의 숫자를 버릴 수 있으므로 1, 2, 3과 같이 여러 개를 버려서는 안됩니다. 1, 2 및 3을 버리는 올바른 방법은 다음과 같습니다. 3, 2, 1 또는 1, 1, 1 순서로 수행하십시오. 또한 인덱스가 0이며 스택의 맨 위에 0이 있습니다.
ArtOfWarfare

2
Git Extensions는 "Stash Changes"버튼을 누를 때 알 수없는 명령을 실행하고 응용 프로그램을 종료했다가 다시 시작한 후에도 계속 수행됩니다. GUI를 사용하여 숨김을 제거하는 확실한 방법은 없지만 명령 행에서 "git stash list"는 WIP 숨김을 표시하고 "git stash clear"는이를 제거합니다.
Dave

215

하나의 숨김을 100 % 확신 하거나 모든 숨김 을 삭제하려는 경우 (a git stash list를 107 % 확신) 다음을 수행 할 수 있습니다.

git stash clear

.. 그리고 잊어 버립니다 (모든 숨김을 삭제합니다).

참고 : 여기에 나와서 모두를 지우는 방법을 찾는 사람들을 위해이 답변을 추가했습니다 (나처럼).


26
당신이 하나의 숨김을 가지고 있다면 여전히 사용하는 것이 좋습니다 git stash drop. 왜냐하면 하나의 숨김을 삭제하기 때문에 예상보다 더 많이 잃을 염려가 없습니다.
Paul Wagland

실제로 모범 사례인지 아닌지에 대한 질문에 실제로 답변했습니다. 오늘 내가 만든 숨김이 없어져야하기 때문에 실제로 이것이 필요합니다.
Alex McCabe

2
나는 오랫동안 오랫동안 숨김을 사용하고 있습니다. 그러나 이번에 git stash drop는 평소처럼 단순히 사용하여 만든 마지막 숨김을 제거 할 수 없었습니다 . 내가 다르게 한 일을 잘 모르겠습니다. 어쨌든, git stash clear나를 위해 일했다. 그것이 존재하는지 몰랐다. +1
Konstantinos Gaitanis 2016 년

3
숨김에 의해 생성 된 파일 중 하나가 이미 존재하기 때문에 git이 숨김을 삭제하는 것을 거부했기 때문에 +1.
Thiago Barcala

12
특히 107 % 확신합니다.
levininja

84

자식 문서에서 : http://git-scm.com/docs/git-stash

드롭 [-q | --quiet] []

숨김 목록에서 단일 숨김 상태를 제거하십시오. 제공되지 않으면 최신 항목을 제거합니다. 즉 stash@{0}, 그렇지 않으면 stash @ {} 형식의 유효한 숨김 로그 참조 여야합니다.

예:

git stash drop stash@{5}

그러면 숨김 항목 5가 삭제됩니다. 모든 숨김 목록을 보려면 다음을 수행하십시오.

git stash list

4
내가 질문의 맨 아래에 명시 적으로 git stash drop이 내가 원하는 것을하지 않는다고 말한 것을 제외하고.
Paul Wagland

1
git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}실행하기 전에 - 를 사용하여 숨김 컨텐츠를 확인하는 것이 좋습니다 git stash drop. 나를 믿어 라, 그것은 많은 문제를 절약 할 것이다 :)
realPK

71

당신은 사용해야합니다

git stash save

그리고 아닙니다

git stash create

이것은 (보통 커밋 객체 인) 숨김을 생성 하고 ref 네임 스페이스의 어느 곳에저장 하지 않고 객체 이름을 반환 하기 때문 입니다. 따라서 숨김 적용으로 액세스 할 수 없습니다.

git stash save "some comment"다른 분기로 복제 / 이동하려는 단계적 변경 사항이있는 경우 사용

git stash apply stash@{0}저장된 (저장된) 변경 사항을 현재 브랜치에 반영하려는 경우 사용 (저장된 숨김 인덱스가 0이라고 가정)

항상 git stash list모든 인덱스를 확인 하는 데 사용할 수 있습니다

git stash drop stash@{0}특정 숨김을 삭제 하려면 (저장된 숨김 인덱스가 0이고 삭제하려는 경우)를 사용하십시오.


3
정보를 제공 git stash하기 위해git stash save
RBT

1
git stash create스크립트에서 사용하도록 고안되었습니다. OP의 사용 사례입니다. 따라서 권장 사항 git stash save은 "정상적인"용도에는 유용하지만 OP의 사용 사례에는 유용하지 않습니다. OP는 문서를 살펴보고 싶을 수 있습니다. 스크립팅과 관련된 더 많은 명령이 있습니다.git stash store
Adrian W

1
git stash save "message"요즘 읽어야 git stash push -m "message"합니다. git commit -m "message"
Tino

2

또한 작동합니다

git stash drop <index>

처럼

git stash drop 5

1

문서가 여기에 있습니다 (중국어) .

당신이 사용할 수있는

자식 숨김 목록

자식 숨김 드롭 숨김 @ {0}

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


git stash creategit stash save특히 양식 만들기가 목록에 표시되지 않으므로 삭제할 수 없으므로 질문과 다릅니다 .
Paul Wagland

@PaulWagland 답장을 보내 주셔서 감사합니다. 솔직히 공식 문서에 "git stash create"가 없습니다. "git stash list"에서 "git stash create"를 찾으려면 관심이 있습니다. 당신은 위에서 이것을 할 수 있습니다.
Longalei

0
git stash           // create stash,
git stash push -m "message" // create stash with msg,
git stash apply         // to apply stash,
git stash apply indexno // to apply  specific stash, 
git stash list          //list stash,
git stash drop indexno      //to delete stash,
git stash pop indexno,
stash pop = stash drop + stash apply
git stash clear         //clear all your local stashed code
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.