git stash는 분기 별입니까 아니면 전체 저장소입니까?


95

나는 지부에 가서 몇 가지 일을했습니다. 나는 다른 지점으로 가고 싶었지만 커밋하고 싶지 않았기 때문에 그렇게했다 git stash. 그리고 나는했다 git checkout <otherbranch>. 나는 그곳에서 약간의 작업을했고, 첫 번째 지점에서와 마찬가지로 작업을 수행하기 전에 전환하고 싶었습니다. 그래서 저도 git stash그곳에서 했어요 . 나는 첫 번째 지점으로 다시 전환 git stash pop하고 특정 지점에서 숨길 것이라고 생각하여 ( ) 숨김을 해제하려고했습니다. 나는 그것이 <otherbranch>(최신 보관함)에서 보관함을 풀었다는 것에 놀랐습니다 . stash가 분기별로 다르다는 인상을 받았지만이 동작은 전체 로컬 저장소에 대해 하나의 숨김 만 있음을 나타냅니다.

git stash분기 별 또는 전체 저장소에가? 전체 저장소에 대한 경우 옵션을 전달하여 분기별로 만들 수 있습니까?

답변:


43

현재 숨김 스택을 보려면 :

git stash list

스택에서 특정 은닉 물을 선택하려면 위와 같이 참조하십시오 .stash@{number}

동작을 분기별로 수행하려면 분기에서 커밋 (또는 여러 커밋)을 만들 수 있습니다. 나중에 언제든지 커밋을 "unmake"할 수 있습니다 (예 : with git reset, either --soft또는 --mixed; git reset 문서 참조 ; 또는git rebase -i 임시를 버리는 동안 최종 "실제"커밋 만 유지).

(실제로 에뮬레이션하려면 git stash적어도 두 개의 커밋이 필요합니다. 하나는 인덱스 상태 용이고 다른 하나는 작업 트리 상태 용입니다. 그러나 인덱스 상태를 저장하고 복원 할 계획이 없다면 git add -A전체 작업 트리 상태 만 가능합니다. 임시 커밋에 넣습니다. 또는 git stash쉘 스크립트이므로 기본적으로 분기별로 작동하도록 매우 쉽게 복사하고 수정할 수 있습니다. 예를 들어 단일 전역 을 사용 하는 대신 작업 이름 공간으로 사용 합니다. 전체 repo. 명시 적으로 이름을 지정하여 한 지점에서 다른 지점으로 숨김을 가져올 수 있습니다.)refs/pb-stash/branchrefs/stash


stash list설명뿐 아니라 각 항목 의 파일 목록을 표시하는 방법을 알고 있습니까?
수륙 양용 dec.

2
git stash show(또는 버전 git stash show stash@{<number>}이외의 경우 @{0})는 당신에게 diff --stat; -p더 큰 차이를 얻으려면 추가하십시오 . 참고 : 이것은 "stash bag" 에있는 "작업 트리"를 중단 된 커밋과 비교합니다. 주어진 stash-bag의 "index"에 무엇이 있는지 볼 수있는 프런트 엔드 인터페이스가 없습니다.
torek

55

아니요. git stash는 저장소 당입니다.

여기에 그것을 사용하는 방법에 대한 좋은 페이지입니다.


두 번째 숨김이 첫 번째 숨김을 덮어 쓰나요? IOW, 두 개의 보관함을했지만 그 사이에 보관하지 않으면 첫 번째 보관함을 잃게 되나요?
수륙 양용

1
아니 당신은 스택 (후입 선출)을 얻습니다. 그런 다음 등, 첫 튀어 다음 다른 다음 2를 팝업, 감춰 스택에 숨겨 놓은 밀어
abasterfield

18

git stash 분기 별이 아닙니다.

  • 대신 git stash(줄기와 가지가 많으면 쉽게 잃을 수 있음)
  • git commit분기에 완료되지 않은 코드를 저장하고 코드를 완료 할 준비가되면 완료 git reset ${COMMIT_HASH_VALUE}되지 않은 코드를 다시 가져 오기 위해 a 를 수행하는 것이 좋습니다.
  • git commit그리고 git reset사용하는 경우 함께 정확하게 시뮬레이션 할 수 있습니다 git stash특정 지점에 대한

다음은 commitreset명령 의 값과 사용법을 보여주는 일반적인 실제 시나리오입니다 .

  • 기능 브랜치 X에서 작업 중이며 코드가 테스트를 컴파일하거나 통과하지도 않습니다.
  • 현재 새로운 기능보다 우선 순위가 높은 버그가 있으므로 버그 수정 작업을 즉시 시작해야합니다.
  • git stash를 수행하는 것보다 (그리고 많은 stashe와 많은 분기가 있기 때문에 stash는 믹스에서 손실됩니다)
  • 당신은 할 수 있습니다 git commit기능 브랜치 X에서
    • 아래로 쓰기 COMMIT_HASH_VALUE에 대한 이상을
  • 핫픽스를위한 새 분기 Y 체크 아웃
  • 분기 Y에서 핫픽스 완료 (병합 요청을 수행하여 핫픽스를 기준선으로 가져오고 핫픽스 분기를 삭제)
  • 그런 다음 기능 브랜치 X를 다시 확인하십시오.
  • 컴파일되지 않았거나 테스트를 통과하지 않은 미완성 작업을 표시하려면-> git reset ${COMMIT_HASH_VALUE}

(참고로 기본값 git reset--mixed)


2
이 시나리오에서 재설정을위한 편리한 단축키는 다음과 같습니다. git reset HEAD~1 입니다.
Sam A. Horvath-Hunt

1
@samHH git reset HEAD ^ 1 실수로 두 번 맞은 인스턴스가 너무 많았으므로 HEAD^1또는 사용하지 않기로 선택했습니다 HEAD~1.
트레버 보이드 스미스

11

여기의 모든 답변이 commit+로 숨김을 에뮬레이트하도록 제안하는 이유를 잘 모르겠습니다 reset. Stash는 특히 여러 지점에서 작업 할 때 사용하기에 완벽합니다. 또한 여러 브랜치에서 작업 할 때 커밋하고 싶지 않습니다. 돌아올 때 모든 수정 된 변경 사항이 편집기에서 강조 표시되기를 원하기 때문입니다.

따라서 다음은 숨김 워크 플로입니다.

브랜치를 전환해야하고 커밋 할 준비가되지 않은 경우 변경 사항을 스택에 저장하십시오.

git stash save "Your custom stash message"

지점으로 돌아 오면 보관함을 확인하세요.

git stash list

여기에 이미지 설명 입력

당신은 지점에있는 경우 FixIssue0203에는 사용을 사용할 수있는 git stash pop이 정상을 적용하기 때문에stash@{0} 숨김에서 제거 .

그러나 in 브랜치의 경우 ImproveReadme먼저 stash 1을 적용한 git stash apply stash@{1}다음 stack에서 stash 1을 제거 해야합니다 git stash drop stash@{1}.

그게 다야!

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