Git Stash

2019-07-25
  • git
  • cheat sheet

    $ git stash list
    $ git push -m "your stash message"
    
    # stash 일부 삭제
    $ git stash drop ${stash@{index} | message}
    # stash 전부 삭제
    $ git stash clear
    

    git stash

    현재 작업하던 것을 잠깐 저장해놓고, 워킹 디렉토리를 HEAD 상태로 바꾼다.

    git push

    깨끗한 상황에서

    $ git status
    현재 브랜치 feature-temp
    커밋할 사항 없음, 작업 폴더 깨끗함
    

    git stash (save <STASH-NAME>) -> 는 이제 Deprecated, push 를 사용하자.

    $ git stash
    Saved working directory and index state WIP on stash-test: 49bf8b2 03 mod mod, add 02 03
    
    $ git status
    On branch stash-test
    nothing to commit, working tree clean
    

    이름을 붙여서 넣어둘 수도 있다.

    $ git stash save my-first-stash
    Saved working directory and index state On stash-test: my-first-stash
    
    $ git status
    On branch stash-test
    nothing to commit, working tree clean
    

    git stash push

    • -u|--include-untracked : 추적하지 않는 파일도 stash 에 저장
    • -m|--message <message> : stash 메세지 작성

    아래와 같이 experimental-work 는 추적중인데 수정한거, private-work 는 추적중이지 않는 파일일 때 그냥 다 stash 에 넣고 싶다. 그러면..

    $ git status
    현재 브랜치 develop-temp
    브랜치가 'origin/develop'보다 2개 커밋만큼 앞에 있습니다.
      (로컬에 있는 커밋을 제출하려면 "git push"를 사용하십시오)
    
    커밋하도록 정하지 않은 변경 사항:
      (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오)
      (use "git restore <file>..." to discard changes in working directory)
    	수정함:        experimental-work
    
    추적하지 않는 파일:
      (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
    	private-work
    
    커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를
    사용하십시오)
    
    
    $ git stash push -u -m "my-first-stash"
    

    git stash list

    stash list 를 확인한다

    lg@HARM-LAPTOP MINGW64 /c/noneedinstall/PortableGit/localRepo/gitStudy (stash-test)
    $ git stash list
    stash@{0}: On stash-test: my-first-stash2
    stash@{1}: On stash-test: my-first-stash1
    stash@{2}: On stash-test: my-first-stash0
    

    git stash show

    stash 하나를 확인한다

    git stash show stash@{0}
     .../a/a.java     | 14 +-------------
     .../b/b.java   | 14 +-------------
     .../r/r.xml    |  6 ++++++
     3 files changed, 8 insertions(+), 26 deletions(-)
    

    뭐가 변경되었는지 확인하고 싶다면 -p 옵션을 사용한다. diff 처럼 나온다.

    git stash show -p stash@{0}
    

    git stash pop

    맨 위쪽의 stash 를 꺼내오고(stack 으로 쌓여있다), stash list 에서 삭제한다.

    $ git stash pop
    On branch stash-test
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            new file:   code04-working
    
    Dropped refs/stash@{0} (093952fa06cbc9d3b71486c7acd7bffa5bca9bbc)
    

    git stash apply

    git stash pop 과 비슷하지만, stash list 에서 삭제하진 않는다.
    가져오기만 한다.

    $ git stash apply stash@{0}
    On branch stash-test
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            new file:   code04-working
    

    git stash drop (stash@{index})

    stash list 에서 저장내역을 삭제한다. 인자를 주면 인자에 해당하는 저장내역을 삭제하고,
    인자가 없으면 stack 의 맨 위에 있는 저장내역을 삭제한다.

    git stash clear

    모든 stash

    참고