ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ch13. Stashes
    Ray Wenderlich/Mastering Git 2021. 9. 21. 16:48

    git stash
    cd .git/refs/
    
    cat stash
    # b6132364bdae71e8a5483e42584257aadbe49827
    git cat-file -p b61323
    
    tree 1a79fa3410189b40dccb6b36f7eda8725c768627
    parent 870aea10aa51d9103e6f6e37217b2cd077dd22bb
    parent 68cde8e6fde76e21a7a93637f0bf5dbc3b36c242
    author Chris Belanger <chris@razeware.com> 1556018137 -0300
    committer Chris Belanger <chris@razeware.com> 1556018137 -0300
    
    WIP on master: 870aea1 Merge branch 'xReadmeUpdates'

     

    Git은 Stash를 생성할때 Commit을 생성하는 메커니즘을 사용한다. 다만 Commit이 아닌 Stash Object로 관리할 뿐이다.

    git cat-file -p 1a79fa
    
    100644 blob 7b378be30685f019b5aa49dfbdd6a1c67001d73c    .tools-version
    100644 blob 28c0f4fd0553ffb10b0ead9cd9584a4d251b61c8    IGNORE_ME
    100644 blob 9d47666971a2b201db4d89f0536d5766af389c7c    LICENSE
    100644 blob 475ce3189a12efc860a75ab19d6e8f30533c723c    README.md
    100644 blob feab599b6be0efb9d20ef20e749b3b8e70e8c69f    SECRETS
    040000 tree d0a7cf32f8ee481267d545000ca99dc532ef0579    css
    040000 tree 29a422c19251aeaeb907175e9b3219a9bed6c616    img
    100644 blob 0ab31637631bfdf857b1e8ad0c2e2ae435db2352    index.html
    040000 tree 3876f897b04b07c02dcbe321ad267b97d1db532f    js

     

    Listing stashes

    git stash list
    
    stash@{0}: WIP on master: 870aea1 Merge branch 'xReadmeUpdates'
    stash@{1}: WIP on master: 870aea1 Merge branch 'xReadmeUpdates'

    Stash는 스택으로 관리된다. 그래서 stash@{0}이 가장 최근에 생성된 stash다.

     

     

    Adding messages to stashes

    git stash push -m "Created temp directory"

    push를 사용해야 메시지를 Argument로 전달할 수 있다. git stash만 쓰면 어떤 argument도 전달할 수 없다.

     

    git log의 대부분 옵션을 git stash show에도 사용할 수 있다.

    git stash show stash@{0}
    
     temp/.keep | 0
     1 file changed, 0 insertions(+), 0 deletions(-)
    # -p means patch option
    git stash show -p stash@{2}
    
    diff --git a/README.md b/README.md
    index b7338e2..475ce31 100644
    --- a/README.md
    +++ b/README.md
    @@ -18,3 +18,7 @@ This project is maintained by teamWYXZ:
     ## Contact Info
    
     For info on this project, please contact [Xanthe](mailto:xanthe@example.com).
    +
    +## Contributing
    +
    +To contribute to this project, simply

     

    Popping stashes, Applying stashes

    git stash apply stash@{2}

    Stash를 apply하면 Stash가 Stack에 계속 남아 있다.

     

    git stash pop
    On branch master
    Your branch is ahead of 'origin/master' by 18 commits.
      (use "git push" to publish your local commits)
    
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        new file:   temp/.keep
    
    Dropped refs/stash@{0} (fca102bbfc2e4dc51264ae46211f95164ac2c933)

    맨 아랫줄을 보면 Dropped어쩌고..

    pop을 하면 Stack에서 Stash가 사라진다.

     

    Clearing your stash stack

    git stash clear

    git stash list를 입력하여 결과를 확인해보자.

     

    Merge conflicts with stashes

    Stash를 적용하는 것은 Commit을 merge하는 것처럼 생각할 수 있다. 그러니까 당연히 Conflict도 있다.

     

    Key points

    • git stash는 commit과 유사한 방식으로 작동하고 .git 서브 디렉터리에 저장된다.
    • git stash는 git stash push와 같다.

    'Ray Wenderlich > Mastering Git' 카테고리의 다른 글

    Ch12. Merge Conflicts  (0) 2021.08.23
    Ch11. How Does Git Actually Work?  (0) 2021.08.23
    Ch10. Merging  (0) 2021.08.21
    Ch9. Creating a Repository  (0) 2021.08.21
    Ch8. Syncing With a Remote  (0) 2021.08.21
Designed by Tistory.