Post

[Git] ์Šคํƒœ์‹œ(Stash)

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ž‘์—… ์ค‘์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” git stash๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. ์ปค๋ฐ‹ํ•˜๊ธฐ์—” ์• ๋งคํ•œ๋ฐ ๋ธŒ๋žœ์น˜๋ฅผ ์˜ฎ๊ฒจ์•ผ ํ•  ๋•Œ, ๋ณ€๊ฒฝ๋ถ„์„ ์ž ์‹œ ์น˜์›Œ๋‘๊ณ  ๋‚˜์ค‘์— ๋˜์‚ด๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

git stash๋ž€? ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์Šคํƒ(stack)์— ์ž„์‹œ ์ €์žฅํ•˜๋Š” ๋ช…๋ น. ์—ฌ๋Ÿฌ ๋ฒˆ ์Œ“์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ๊ธ‰ํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ ๋’ค ๋‹ค์‹œ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

flowchart LR
    W["์ž‘์—… ์ค‘ ๋ณ€๊ฒฝ"] -- "stash save" --> S[("Stash ์Šคํƒ")]
    S -- "apply/pop" --> W2["์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ณต์›"]

1. ํ•ต์‹ฌ ๋ช…๋ น์–ด

๋ช…๋ น์—ญํ• 
git stash save "๋ฉ”์‹œ์ง€"๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ €์žฅ(+๋ฉ”์‹œ์ง€)
git stash liststash ๋ชฉ๋ก ํ™•์ธ
git stash apply stash@{n}์ ์šฉ(stash ์œ ์ง€)
git stash drop stash@{n}stash ์ œ๊ฑฐ
git stash pop stash@{n}์ ์šฉ + ์ œ๊ฑฐ(ํ•œ ๋ฒˆ์—)
git stash apply --indexStaging Area๊นŒ์ง€ ๋ณต์›
1
2
3
git stash save "์ž‘์—… ์ž„์‹œ ์ €์žฅ"
git stash list
git stash pop stash@{0}      # ์ ์šฉ + ์ œ๊ฑฐ

๐Ÿ’ก apply vs pop โ€” apply๋Š” stash๋ฅผ ๋‚จ๊ฒจ๋‘” ์ฑ„ ์ ์šฉํ•˜๊ณ , pop์€ ์ ์šฉ ํ›„ ์‚ญ์ œํ•œ๋‹ค. ๊ฐ™์€ ๋ณ€๊ฒฝ๋ถ„์„ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜์— ์ ์šฉํ•  ๊ฑฐ๋ฉด apply, ํ•œ ๋ฒˆ ์“ฐ๊ณ  ๋ง ๊ฑฐ๋ฉด pop์ด ๊น”๋”ํ•˜๋‹ค.


2. ์‹ค์ „ ํ™œ์šฉ

๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™

1
2
3
git stash save "๋ธŒ๋žœ์น˜ ์ „ํ™˜์šฉ ์ €์žฅ"
git checkout feature-branch
git stash apply stash@{0}

๊ธ‰ํ•œ ์ˆ˜์ • ์ฒ˜๋ฆฌ

1
2
3
git stash save "Emergency fix"   # ํ•˜๋˜ ์ผ ์น˜์›Œ๋‘๊ณ 
# ... ๊ธ‰ํ•œ ์ˆ˜์ • ...
git stash apply stash@{0}        # ๋‹ค์‹œ ์›๋ž˜ ์ž‘์—… ๋ณต์›

์ƒˆ ๋ธŒ๋žœ์น˜๋กœ ์ด์–ด์„œ ์ž‘์—…

1
2
3
git stash save "์ž‘์—… ์ด์–ด๊ฐ€๊ธฐ"
git checkout -b new-feature-branch
git stash apply stash@{0}

๐Ÿ’ก ์ปค๋ฐ‹ํ•˜๊ธฐ์—” ๋ฏธ์™„์„ฑ์ด์ง€๋งŒ ๋ธŒ๋žœ์น˜๋Š” ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด stash์˜ ์ „ํ˜•์  ์šฉ๋„๋‹ค. ์ž‘์—…๋ฌผ์„ โ€œ์ž ๊น ์„œ๋ž์— ๋„ฃ์–ด๋‘๋Š”โ€ ๋А๋‚Œ์œผ๋กœ, ๋ธŒ๋žœ์น˜ ๊ฐ„ ์ด๋™์„ ์ž์œ ๋กญ๊ฒŒ ํ•ด์ค€๋‹ค.


3. ์ฃผ์˜์‚ฌํ•ญ

โš ๏ธ ์ถฉ๋Œ ํ•ด๊ฒฐ โ€” stash ์ ์šฉ ์‹œ ํ˜„์žฌ ์ฝ”๋“œ์™€ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๊ณ  git add ํ›„, ๋‚จ์€ stash๋Š” git stash drop์œผ๋กœ ์ •๋ฆฌํ•œ๋‹ค.

๐Ÿ’ก ์œ ์šฉํ•œ ์˜ต์…˜ โ€” --keep-index(Staged ๋ณ€๊ฒฝ ์œ ์ง€), --include-untracked(์ถ”์  ์•ˆ ๋œ ์ƒˆ ํŒŒ์ผ๋„ ์ €์žฅ), --patch(๋ณ€๊ฒฝ ์ผ๋ถ€๋งŒ ์„ ํƒ ์ €์žฅ). ํ•„์š”์— ๋”ฐ๋ผ stash๋ฅผ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ €์žฅ ์‹œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ช…์‹œํ•˜๋ฉด ๋‚˜์ค‘์— ์–ด๋–ค ์ž‘์—…์ธ์ง€ ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
git stash
โ”œโ”€ ์ €์žฅ   git stash save "๋ฉ”์‹œ์ง€"
โ”œโ”€ ํ™•์ธ   git stash list
โ”œโ”€ ๋ณต์›   apply(์œ ์ง€) / pop(์ œ๊ฑฐ)
โ””โ”€ ์˜ต์…˜   --index / --include-untracked / --patch
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
stash๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ž„์‹œ ์ €์žฅ ์Šคํƒ
apply/pop์œ ์ง€ ๋ณต์› / ์ œ๊ฑฐ ๋ณต์›
โ€“include-untracked์ƒˆ ํŒŒ์ผ๊นŒ์ง€ ์ €์žฅ

git stash์˜ ํ•ต์‹ฌ์€ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ  ์ž‘์—…๋ฌผ์„ ์ž ์‹œ ์น˜์›Œ๋‘๋Š” ๊ฒƒ์ด๋‹ค. ๋ธŒ๋žœ์น˜๋ฅผ ์ž์ฃผ ์˜ค๊ฐ€๊ฑฐ๋‚˜ ๊ธ‰ํ•œ ์ˆ˜์ •์ด ๋ผ์–ด๋“ค ๋•Œ, ํ•˜๋˜ ์ผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ–ˆ๋‹ค๊ฐ€ ๋˜์‚ด๋ฆด ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ์‹ค์šฉ์ ์ด๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.