Git ๋‚ด๋ถ€ ๋™์ž‘ ํŒŒํ—ค์น˜๊ธฐ - Part 2

hayeon
  • #Git
  • #branch
  • #reset
  • #revert
  • #rebase
  • #HEAD
  • #log
  • #diff

๋“ค์–ด๊ฐ€๋ฉฐ

์•ˆ๋…•ํ•˜์„ธ์š”. ์›๋”์›” ๋ชจ๋ฐ”์ผํŒ€์—์„œ ์•ฑ ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๋Š” ์ดํ•˜์—ฐ์ž…๋‹ˆ๋‹ค.

์ง€๋‚œ๋ฒˆ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ ์˜ค๋Š˜์€ Git์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์— ๋Œ€ํ•ด์„œ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Part1์„ ๋ณด์‹œ์ง€ ๋ชปํ•œ ๋ถ„๋“ค๊ป˜์„œ๋Š” ์ด์ „ ํฌ์ŠคํŠธ๋ฅผ ๋ณด๊ณ  ์˜ค๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

0) Branch


branch๋ž€, ๋™์ผํ•œ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

Git์—์„œ master(main) ๋ธŒ๋žœ์น˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ธŒ๋žœ์น˜์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ master ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ master ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ณดํ†ต branch๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ๋ฐ”๋กœ ์ด ์ƒ์„ฑ๋œ branch์—์„œ ๊ฐ์ž ์ž‘์—…ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

1) log VS diff

์ฒ˜์Œ์œผ๋กœ ๋ง์”€๋“œ๋ฆด ๋‚ด์šฉ์€ branch์˜ ์ •๋ณด ํ™•์ธ ๋ฐ ์ฐจ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” log์™€ diff์ž…๋‹ˆ๋‹ค.

1-1) log

git log๋Š” Git ์ €์žฅ์†Œ์˜ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ์กฐํšŒํ•˜๋Š” ๋ช…๋ น์–ด๋กœ ์ปค๋ฐ‹ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๊ฐ ์ปค๋ฐ‹ ์ด๋ ฅ์—๋Š” ์ปค๋ฐ‹์˜ ํ•ด์‹œ๊ฐ’, ์ž‘์„ฑ์ž, ์ž‘์„ฑ์ผ์ž, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๋“ฑ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

branch๋Š” Git์—์„œ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ธŒ๋žœ์น˜์™€ ๊ฐ™์€ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋ฉด ์ปค๋ฐ‹ ์ด๋ ฅ์„ ๊ณต์œ ํ•˜๋ฉฐ, ์ดํ›„ ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ์ถ”๊ฐ€๋˜๋ฉด ํ•ด๋‹น ๋ธŒ๋žœ์น˜์˜ ํฌ์ธํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ์ด๋ ฅ๊ณผ ๋ณ„๊ฐœ๋กœ ํ•ด๋‹น ๋ธŒ๋žœ์น˜ ๋‚ด์—์„œ๋งŒ ์ด๋ ฅ์ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์‹ค์Šตํ•œ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ๋” ๊นŠ๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์‚ฌ์ง„์€ main์—์„œ f1.text ํŒŒ์ผ์„ ์ƒ์„ฑ ํ›„ ์ฒซ ๋ฒˆ์งธ commit, ์ˆ˜์ • ํ›„ ๋‘ ๋ฒˆ์งธ commit์„ ํ•œ ์ƒํƒœ์—์„œ git log๋ฅผ ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

์ด ์ƒํƒœ์—์„œ ์ƒˆ ๋ธŒ๋žœ์น˜ feature๋กœ checkout ํ›„ git log์„ ์ฐ๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

main ๋ธŒ๋žœ์น˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ™์€ ์ƒํƒœ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ƒํƒœ์—์„œ f1.text์˜ ๋‚ด์šฉ์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ˆ˜์ • ํ›„ ์„ธ ๋ฒˆ์งธ commit์„ ํ•˜๊ณ  git log๋ฅผ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜๋‹ค์‹œ git main์œผ๋กœ checkout ํ›„ git log๋ฅผ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ์†Œ์Šค ์ฝ”๋“œ์˜ ํŠน์ • ์ง€์ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒˆ๋กœ์šด ์ฐธ์กฐ ํฌ์ธํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋Š” ๊ธฐ์กด ๋ธŒ๋žœ์น˜์˜ ์ด๋ ฅ์„ ๊ทธ๋Œ€๋กœ ์ด์–ด๋ฐ›์•„ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ๊ฐ์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋™์‹œ์— ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๋•Œ, ๊ฐ์ž์˜ ๋ธŒ๋žœ์น˜์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•œ ํ›„ log์˜ ์˜ต์…˜๋“ค์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  1. feature์— f1.text ๋‚ด์šฉ ์ˆ˜์ • ํ›„ commit(message : 4)์„ ํ•˜๊ธฐ ( HEAD โ†’ feature )
  2. main์— f1.text ๋‚ด์šฉ ์ˆ˜์ • ํ›„ commit(message : 5)์„ ํ•˜๊ธฐ ( HEAD โ†’ main )

main์— ์žˆ์„ ๋•Œ git log๋ฅผ ์ฐ์œผ๋ฉด main์— ๋Œ€ํ•œ ์ปค๋ฐ‹ ์ด๋ ฅ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ feature๋กœ ์ฒดํฌ์•„์›ƒํ•œ ํ›„ git log๋ฅผ ์ฐ์œผ๋ฉด feature์— ๋Œ€ํ•œ ์ปค๋ฐ‹ ์ด๋ ฅ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋ชจ๋“  ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ๋‚ด์šฉ์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, --branches ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

git log --branches

๋งŒ์•ฝ Git Log(๋ธŒ๋žœ์น˜ ์ž‘์—… ํ๋ฆ„, ๋ณ‘ํ•ฉ ๋“ฑ)๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, --graph ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

--graph ์˜ต์…˜์€ ๊ฐ ์ปค๋ฐ‹์˜ ํ•ด์‹œ๊ฐ’, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€, ์ž‘์„ฑ์ž ๋“ฑ๊ณผ ํ•จ๊ป˜ ๋ธŒ๋žœ์น˜ ๋ฐ ๋จธ์ง€ ์ด๋ ฅ์„ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ ๋ธŒ๋žœ์น˜๋Š” ๋…ธ๋“œ๋กœ ํ‘œ์‹œ๋˜๊ณ , ์ปค๋ฐ‹์€ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด Git ์ €์žฅ์†Œ์˜ ์ด๋ ฅ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋‘ ๋ฒ„์ „์˜ ์ฐจ์ด๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด, ๋น„๊ตํ•  ๋‘ ๊ฐœ(A, B)์˜ ๋ธŒ๋žœ์น˜ ์‚ฌ์ด์— โ€˜..โ€™ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

A..B ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, B ๋ธŒ๋žœ์น˜์— ์กด์žฌํ•˜๋Š” ์ปค๋ฐ‹ ์ค‘์—์„œ A์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปค๋ฐ‹์„ ์ฐพ์•„์ฃผ๋ฉฐ

B..A ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, A ๋ธŒ๋žœ์น˜์— ์กด์žฌํ•˜๋Š” ์ปค๋ฐ‹ ์ค‘์—์„œ B์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปค๋ฐ‹์„ ์ฐพ์•„์ค๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ, ์‚ฌ์ด์— ์˜ต์…˜ p๋ฅผ ์“ฐ๋ฉด ๋ฒ„์ „๋ณ„๋กœ ์–ด๋–ค ์†Œ์Šค ์ฝ”๋“œ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1-2) diff

์ด๋ฒˆ์—๋Š” ๋‘ ๋ธŒ๋žœ์น˜ ์‚ฌ์ด์— ์žˆ๋Š” ํŒŒ์ผ ํ˜น์€ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฐ„์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ํŒŒ์•…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Git์—์„œ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ diff์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์ „์— ๊ธฐํ˜ธ์˜ ์˜๋ฏธ์— ๋Œ€ํ•ด์„œ ๋ณด๋ฉด ---๋Š” ์ด์ „ ๋ฒ„์ „์˜ ํŒŒ์ผ์„, +++๋Š” ๋ณ€๊ฒฝ๋œ ๋ฒ„์ „์˜ ํŒŒ์ผ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, -๋Š” ์ด์ „ ๋ฒ„์ „์—์„œ ์‚ญ์ œ๋œ ๋‚ด์šฉ, +๋Š” ๋ณ€๊ฒฝ๋œ ๋ฒ„์ „์—์„œ ์ถ”๊ฐ€๋œ ๋‚ด์šฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋˜ํ•œ @@ ๊ธฐํ˜ธ๋Š” ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, -์™€ +๊ธฐํ˜ธ ์˜†์— ์œ„์น˜ํ•œ ์ˆซ์ž๋Š” ํ•ด๋‹น ๋‚ด์šฉ์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  1. A..B ํ˜•ํƒœ

diff์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉด, a/f1.text์™€ b/f1.textํŒŒ์ผ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ณ  ์žˆ๊ณ , ํŒŒ์ผ๊ฐ„์˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. --- a/f1.text: ์›๋ž˜ ํŒŒ์ผ์˜ ๋ฒ„์ „์„ , +++ b/f1.text: ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. @@ ์ดํ›„์— ๋‚˜์˜ค๋Š” -1,3์€ ๋ณ€๊ฒฝ ์ „ ํŒŒ์ผ์—์„œ ์ฒซ๋ฒˆ์งธ ์ค„์—์„œ๋ถ€ํ„ฐ ์„ธ ์ค„์„ ์˜๋ฏธํ•˜๊ณ  +1,4๋Š” ๋ณ€๊ฒฝ ํ›„ ํŒŒ์ผ์—์„œ ์ฒซ๋ฒˆ์งธ ์ค„์—์„œ๋ถ€ํ„ฐ ๋„ค ์ค„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. -f ๋Š” ์›๋ž˜ ํŒŒ์ผ์—์„œ ์‚ญ์ œ๋œ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๊ณ  +c,+d ๋Š” ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์—์„œ ์ถ”๊ฐ€๋œ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ฆ‰, f1.textํŒŒ์ผ์˜ 3๋ฒˆ์งธ ์ค„์— ์žˆ๋˜ f ๋ฌธ์ž๊ฐ€ c๋กœ ๋ณ€๊ฒฝ๋˜๊ณ , 4๋ฒˆ์งธ ์ค„์— d ๋ฌธ์ž๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฐ๊ณผ๋ฅผ diff๋ฅผ ํ†ตํ•ด ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. B..A ํ˜•ํƒœ

A..B ํ˜•ํƒœ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋‘ ๋ธŒ๋žœ์น˜ ์‚ฌ์ด์˜ ์ฐจ์ด์ ์„ ๋น„๊ตํ•˜์ง€๋งŒ B..A ํ˜•ํƒœ๋Š” B์—์„œ A๋กœ ๊ฐ€๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. B ๋ธŒ๋žœ์น˜ ์ž…์žฅ์—์„œ -c์™€ -d๋Š” ์‚ญ์ œ๋œ ๋‚ด์šฉ์ด๊ณ , +f๋Š” ์ถ”๊ฐ€๋œ ๋‚ด์šฉ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด, ์•ž์„œ ์„ค๋ช…๋“œ๋ฆฐ git log A..B๋Š” ๋‘ ๋ธŒ๋žœ์น˜ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ B ๋ธŒ๋žœ์น˜์— ์กด์žฌํ•˜๋Š” ์ปค๋ฐ‹๋“ค์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ˜๋ฉด, git diff A..B๋Š” ๋‘ ๋ธŒ๋žœ์น˜ ์‚ฌ์ด์— ์žˆ๋Š” ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฐ„์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค€๋‹ค๋Š” ์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

2) HEAD ํŒŒ์ผ

์œ„์—์„œ ์‚ดํŽด๋ณธ git log์˜ ๊ฒฐ๊ณผ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด HEAD๋ผ๋Š” ํ‘œ์‹œ๊ฐ€ ๊ณ„์† ๋ณด์˜€๋Š”๋ฐ์š”. ๊ณผ์—ฐ ์ด HEAD๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

HEAD ํŒŒ์ผ์€ .git ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ์ด๋ฉฐ, ์ด ํŒŒ์ผ์€ ์ฒ˜์Œ์—๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋œ ref: refs/heads/main ๋ž€ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ref: refs/heads/main ํŒŒ์ผ์€ ์–ด๋””์—๋„ ์กด์žฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ž, ์ด ์ƒํƒœ์—์„œ f1.text๋ฅผ ์ƒ์„ฑ ํ›„ add & commit(message: 1)์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋“œ๋””์–ด ์ƒ๊ธด ref: refs/heads/main ๋Š” ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹์„ ์‹œ์ž‘ํ•œ ์‹œ์ ๋ถ€ํ„ฐ ์ƒ์„ฑ์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ทธ ์•ˆ์„ ์‚ดํŽด๋ณด๋‹ˆ commit ํ•ด์‹œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” object์˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๋ฒˆ ๋” ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๊ธฐ ์œ„ํ•ด f1.text ๋‚ด์šฉ์„ ์ˆ˜์ • ํ›„ add & commit(message: 2)์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ref: refs/heads/main ๋‚ด์šฉ์ด ๋ฐฉ๊ธˆ ์ปค๋ฐ‹ํ•œ ๋‘ ๋ฒˆ์งธ commit ํ•ด์‹œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” object Id๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ feature ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด .git ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด๋ถ€์˜ ๋ณ€ํ™”๋Š” ์–ด๋–ป๊ฒŒ ๋ฐ”๋€”๊นŒ์š”?

2๊ฐœ์˜ ํŒŒ์ผ์ด ๋ณ€ํ™”ํ–ˆ๋Š”๋ฐ, ๊ทธ ์ค‘ ref: refs/heads/feature ํŒŒ์ผ์ด ์ƒ๊ฒผ๊ณ  main๊ณผ ๋™์ผํ•˜๊ฒŒ ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด .git/refs/heads/branch์ด๋ฆ„ ํŒŒ์ผ์€ ํ˜„์žฌ ์ฒดํฌ์•„์›ƒํ•œ ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ํŒŒ์ผ๋กœ, ๋ธŒ๋žœ์น˜๋ฅผ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ์ค‘์š”ํ•œ .git/refs/heads/feature ํŒŒ์ผ์„ ์ง€์šฐ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

๋ชจ๋“  ๋ธŒ๋žœ์น˜๋ฅผ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” git branch๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, feature ๋ธŒ๋žœ์น˜๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ์ตœ์‹  ์ปค๋ฐ‹ ๋‚ด์šฉ์„ ๋‹ด์€ .git/refs/heads/feature ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด? ๋‹ค์‹œ feature ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์•Œ๊ฒŒ ๋œ ๋†€๋ผ์šด ์‚ฌ์‹ค์€ git์—์„œ ๋ธŒ๋žœ์น˜๋Š” ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ์ผ์„ ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๋‹จ์ง€ .git/refs/heads/ ํ•˜์œ„์—์„œ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์กด์žฌํ•œ๋‹ค๋Š” ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์‚ญ์ œ ํ›„ ์ง์ ‘ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ feature๋กœ checkout์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋‚ด๋ถ€๋Š” ์–ด๋–ป๊ฒŒ ๋ณ€ํ• ๊นŒ์š”? ์˜ˆ์ƒํ–ˆ๋˜ ๋Œ€๋กœ HEAD๊ฐ€ feature๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  feature์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด, git log์— ํ‘œ์‹œ๋˜๋Š” HEAD๋Š” Git์—์„œ ํ˜„์žฌ ์ฒดํฌ์•„์›ƒํ•œ ๋ธŒ๋žœ์น˜๋‚˜ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๋ธŒ๋žœ์น˜๋‚˜ ์ปค๋ฐ‹์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ณ , Git ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ HEAD๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3) merge VS rebase

๋‹ค์Œ์œผ๋กœ ์‚ดํŽด๋ณผ ๋‚ด์šฉ์€ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ์ž‘์—…ํ•˜๋Š” ๊ณผ์ •์—์„œ ์“ฐ์ด๋Š” ๋ช…๋ น์–ด merge์™€ rebase ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ช…๋ น์–ด ๋ชจ๋‘ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋™์‹œ์— ์ž‘์—…ํ•˜๊ณ  ์žˆ์„ ๋•Œ, ๊ฐ๊ฐ์˜ ์ž‘์—… ๋‚ด์šฉ์„ ํ†ตํ•ฉํ•  ๊ฒฝ์šฐ ์“ฐ์ด๋‚˜ ์ž‘์—… ํ™˜๊ฒฝ๊ณผ ํ๋ฆ„ ๋“ฑ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

merge, rebase์˜ ๋™์ž‘์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

3-1) merge

merge๋Š” ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•˜๋‚˜์˜ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์œผ๋กœ ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  1. ๊ฐ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ๊ฐ€์ง„ main๊ณผ feature ๋ธŒ๋žœ์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  2. feature์— main์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ git checkout feature โ†’ git merge main์„ ์‹คํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  3. ๊ทธ ๊ฒฐ๊ณผ 3-way ๊ธฐ๋ฒ•์„ ํ†ตํ•ด main์˜ ์ตœ์‹  ์ปค๋ฐ‹, feature์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ณตํ†ต ์กฐ์ƒ์œผ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด ์ปค๋ฐ‹(066b182)์ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, feature ๋ธŒ๋žœ์น˜์—์„œ 1๋ฒˆ๊ณผ 2๋ฒˆ ๋ถ€๋ถ„ ๋ชจ๋‘๋ฅผ ๊ฐ€์ง„ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์ด ์ƒ์„ฑ๋˜๋ฉด์„œ main ๋ธŒ๋žœ์น˜์™€ ๋ณ‘ํ•ฉํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

merge๋Š” ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ณ‘๋ ฌ๋กœ ๋‚˜์•„๊ฐ€์„œ ๋‘ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  ๋ณ‘ํ•ฉ๋œ ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•˜๊ณ , ์ด ๋ณ‘ํ•ฉ๋œ ์ปค๋ฐ‹์€ ๊ฐ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์ง€๋งŒ, ๋‘ ๋ธŒ๋žœ์น˜์˜ ๊ณตํ†ต ์กฐ์ƒ ์ปค๋ฐ‹์„ ๊ธฐ์ค€์œผ๋กœ ๋ณ‘ํ•ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ธŒ๋žœ์น˜์—์„œ ๋™์ผํ•œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ๋ฐœ์ƒํ•œ ์ถฉ๋Œ์˜ ๊ฒฝ์šฐ ํ•ด๊ฒฐํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

3-2) rebase

rebase๋Š” ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์™€์„œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์„ ํ˜•์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐ€์ ธ์˜จ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ๋งˆ์น˜ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์ผ์–ด๋‚œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. rebase๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์ ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ฏ€๋กœ, ๋ณ€๊ฒฝ ์ด๋ ฅ์ด ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, rebase์—์„œ base ์˜๋ฏธ๋Š” ๋‘ ๊ฐœ์˜ ๋ธŒ๋žœ์น˜๊ฐ€ ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปค๋ฐ‹์„ ์˜๋ฏธํ•˜๊ณ , rebase๋ฅผ ํ•œ๋‹ค๋Š” ๊ฑด base๋ฅผ ๋ฐ”๊พผ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ดˆ๊ธฐ ์ƒํƒœ์„ ๋งŒ๋“  ํ›„ feature์˜ ์ž…์žฅ์—์„œ base์˜ ๋ณ€ํ™”๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ base๋Š” master์™€ featrue์˜ ๊ณตํ†ต ์กฐ์ƒ์˜ ์ปค๋ฐ‹์ธ b576179๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

rebase ์ „

rebase ํ›„

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด feature๋Š” b576179๋ฅผ ์กฐ์ƒ(base)์œผ๋กœ ํ•˜๋Š” ๋ธŒ๋žœ์น˜์˜€๋Š”๋ฐ rebase๋ฅผ ํ•˜๊ณ ๋‚œ ํ›„ feature์˜ ์กฐ์ƒ์€ master๊ฐ€ ์œ„์น˜ํ•œ 1e05be4๋ฅผ ์กฐ์ƒ(rebase)์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ feature๋Š” rebase ์ „๊นŒ์ง€๋Š” master๊ฐ€ ์ž‘์—…ํ•œ 2๊ฐœ์˜ ์ปค๋ฐ‹์ด ํฌํ•จ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ, rebase ํ›„ M1,M2๊นŒ์ง€ ๋‚ด์šฉ์ด ํฌํ•จ๋œ ๋ธŒ๋žœ์น˜๊ฐ€ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ƒํƒœ์—์„œ master๊ฐ€ feature ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ (R1,R2)๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด git checkout master ํ›„ git merge feature ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

rebase๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๊ณ  ์ˆœ์„œ๋Œ€๋กœ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋’ค์— ๋ง๋ถ™์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ธŒ๋žœ์น˜ ๊ฐ„์˜ ๋ณ‘ํ•ฉ๋œ ์ปค๋ฐ‹์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์•„ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊นจ๋—์ด ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋žœ์น˜ ๊ฐ„์˜ ๊ฐ™์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์ปค์ง€๊ณ , ์ด ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๋Š” ์ž‘์—…์€ merge๋ณด๋‹ค ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด merge์™€ rebase๋Š” ๋ชจ๋‘ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ™์€ ์ฝ”๋“œ ๋ฒ ์ด์Šค์—์„œ ์ž‘์—…ํ•  ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ์ž‘์—… ๋‚ด์šฉ์„ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๋‘ ๋ช…๋ น์–ด๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๊ณผ์ •์— ์ฐจ์ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

4) reset VS revert

๋งˆ์ง€๋ง‰์œผ๋กœ Git์˜ ๊ณผ๊ฑฐ ์ปค๋ฐ‹์„ ๋‹ค๋ฃจ๋Š” ๋ช…๋ น์–ด reset, revert๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4-1) reset

reset์€ HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ธŒ๋žœ์น˜์˜ ๋ฒ„์ „์„ ๋ฐ”๊พธ๋ฉด์„œ ์ปค๋ฐ‹ ์ดํ›„์˜ ์ž‘์—… ๋‚ด์šฉ์ด ์ทจ์†Œ๋œ ํšจ๊ณผ์ฒ˜๋Ÿผ ๋ณด์—ฌ์ฃผ๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ํžˆ์Šคํ† ๋ฆฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

reset ๋ช…๋ น์–ด๋Š” ๋˜๋Œ์•„๊ฐ€๊ณ  ์‹ถ์€ ์ปค๋ฐ‹์˜ id๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•˜๊ณ , ์ด๋•Œ ์–ด๋–ค ์˜ต์…˜(soft, mixed, hard)์„ ์„ ํƒํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ์ทจ์†Œ๋˜๋Š” ๋Œ€์ƒ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. (์ด์ „ ํฌ์ŠคํŠธ์—์„œ ์–˜๊ธฐํ–ˆ๋˜ working directory, index, repository์˜ ๊ฐœ๋…์„ ๊ฐ€์ ธ์™€ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค)

์ž, โ€œinitโ€์˜ ๋‚ด์šฉ์„ ์ง€๋‹Œ f1.text ํŒŒ์ผ์„ ์ƒ์„ฑ ํ›„ git add & commit ( message : 1 ) ํ•œ ์ƒํƒœ์—์„œ ์ˆ˜์ •ํ•˜๊ณ  reset ํ•˜๋ฉด์„œ ์˜ต์…˜์— ๋”ฐ๋ผ working directory, index, repository์—์„œ ๊ฐ๊ฐ f1.text ๋‚ด์šฉ์ด ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ €, โ€œrepositoryโ€๋กœ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•œ f1.text ํŒŒ์ผ์„ git add & commit ( message : 2 ) ํ•˜๊ฒŒ ๋˜๋ฉด

working directory, index, repository์˜ f1.text์˜ ๋‚ด์šฉ์€ ๋ชจ๋‘ โ€œrepositoryโ€์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

working directory โ†’ repository

index โ†’ repository

repository โ†’ repository


๊ทธ ๋‹ค์Œ โ€œindexโ€๋กœ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•œ f1.text ํŒŒ์ผ์„ git add๊นŒ์ง€ ํ•œ ์ƒํƒœ์—์„œ ์‚ดํŽด๋ณด๋ฉด f1.text ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.


๊ทธ ๋‹ค์Œ โ€œworking directoryโ€๋กœ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•œ f1.text ํŒŒ์ผ์„ add, commit ํ•˜์ง€ ์•Š์œผ๋ฉด f1.text ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

์ด ์ƒํƒœ์—์„œ ๊ฐ๊ฐ ์˜ต์…˜์„ ์ ์šฉํ•˜์—ฌ 7b7fโ€ฆ74๋กœ reset ํ–ˆ์„ ๋•Œ์˜ ๋ณ€ํ™”๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. soft ์˜ต์…˜

    ๋จผ์ €, soft ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    git reset --soft 7b7f9e441718f33183cbca20c8fcdf54792d5474

    ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, repository๋Š” ์ดˆ๊ธฐํ™”๋˜์—ˆ์œผ๋‚˜ working directory, index์˜ ๋‚ด์šฉ์—๋Š” ๋ณ€ํ™”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

    • working directory โ†’ ๋ณ€ํ™”์—†์Œ

    • index โ†’ ๋ณ€ํ™”์—†์Œ

    • repository โ†’ init ์œผ๋กœ ์ดˆ๊ธฐํ™” ๋จ

  2. mixed ์˜ต์…˜

    ORIG_HEAD๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ reset ํ•˜๊ธฐ ์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ ํ›„ mixed๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ( ORIG_HEAD๋Š” ์•„๋ž˜์—์„œ ๋ณด์ถฉ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. )

    git reset --soft ORIG_HEAD
    
    git reset --mixed 7b7f9e441718f33183cbca20c8fcdf54792d5474

    ์ด๋ฒˆ์—๋Š”, repository, index๋Š” ์ดˆ๊ธฐํ™”๋˜์—ˆ์œผ๋‚˜ working directory์˜ ๋‚ด์šฉ์—๋Š” ๋ณ€ํ™”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

    • working directory โ†’ ๋ณ€ํ™”์—†์Œ

    • index โ†’ init ์œผ๋กœ ์ดˆ๊ธฐํ™” ๋จ

    • repository โ†’ init ์œผ๋กœ ์ดˆ๊ธฐํ™” ๋จ

  3. hard ์˜ต์…˜

    ORIG_HEAD๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ reset ํ•˜๊ธฐ ์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ ํ›„ hard๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    git reset --mixed ORIG_HEAD
    
    git reset --hard 7b7f9e441718f33183cbca20c8fcdf54792d5474

    ์ด๋ฒˆ์—๋Š”, repository, index, working directory ์˜์—ญ ๋ชจ๋‘ init์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

    • working directory โ†’ init ์œผ๋กœ ์ดˆ๊ธฐํ™” ๋จ

    • index โ†’ init ์œผ๋กœ ์ดˆ๊ธฐํ™” ๋จ

    • repository โ†’ init ์œผ๋กœ ์ดˆ๊ธฐํ™” ๋จ

์•„๋ž˜์— ์ •๋ฆฌํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ๊ฐ ์˜ต์…˜์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์— ๋”ฐ๋ผ ์ทจ์†Œ๋˜๋Š” ๋Œ€์ƒ์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • soft๋Š” repository๋Š” ์ดˆ๊ธฐํ™”๋˜๋‚˜, working directory, index์˜ ๋‚ด์šฉ์€ ๊ฑด๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • mixed๋Š” index, repository๋Š” ์ดˆ๊ธฐํ™”๋˜๋‚˜ working directory์˜ ๋‚ด์šฉ์€ ๊ฑด๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • hard๋Š” working directory, index, repository ๋‚ด์šฉ์ด ๋ชจ๋‘ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ์—” reset ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด์ „ ์ƒํƒœ๋กœ ๋ณต์›ํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € 4๊ฐœ์˜ commit์„ ๊ฐ€์ง„ main ๋ธŒ๋žœ์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„ ์ƒํƒœ์—์„œ reset โ€”hard ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹id๊ฐ€ 6631โ€ฆ.d6e๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ๋ณ€ํ• ๊นŒ์š”?

ref: refs/heads/main ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ์ทจ์†Œํ•œ ์ปค๋ฐ‹id๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด reset์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ฒดํฌ์•„์›ƒํ•˜๊ณ  ์žˆ๋Š” ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๋ฐ”๊พธ๋Š” ํ–‰์œ„๋งŒ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ทจ์†Œํ•œ ์ปค๋ฐ‹์€ ์ง€์›Œ์ง„ ๊ฑธ๊นŒ์š”? ์•„๋‹™๋‹ˆ๋‹ค. git์€ ์›ฌ๋งŒํ•ด์„œ๋Š” ์–ด๋– ํ•œ ์ •๋ณด๋„ ์ง€์šฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ORIG_HEAD ํŒŒ์ผ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

./ORIG_HEAD์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์‚ญ์ œํ•œ commit id๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

โ€œgit reset โ€”hard ORIG_HEADโ€ ๋ฅผ ํ•˜๋ฉด reset ํ•˜๊ธฐ ์ „์˜ ์ƒํƒœ๋กœ ์›์ƒ ๋ณต๊ตฌ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ORIG_HEAD ํŒŒ์ผ์€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ํ—ค๋”๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ปค๋ฐ‹์„ ๊ธฐ๋กํ•ด๋‘๊ณ , ๋ฆฌ์…‹ ํ•˜๊ธฐ ์ „์˜ ์ปค๋ฐ‹์ด ๋ฌด์—‡์ธ๊ฐ€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ reset ํ•˜๊ธฐ ์ „์œผ๋กœ ์›์ƒ๋ณต๊ตฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๋ณ„๋„์˜ ์˜ต์…˜์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด default๋กœ mixed ์˜ต์…˜์ด ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— reset ํ•  ๋•Œ ์‚ฌ์šฉํ•œ ์˜ต์…˜์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ reset์˜ ์˜ต์…˜์— ๋”ฐ๋ผ ์–ด๋–ค ์˜์—ญ์— ์˜ํ–ฅ์„ ๋ผ์น˜๋Š”์ง€์™€ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ˆ˜๋กœ reset์„ ํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์›์ƒ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

4-2) revert

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ์‹ค์ˆ˜ํ•œ ๊ฒƒ๊นŒ์ง€ ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ฒจ๋†“๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ๋ฐ”๋กœ revert๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

revert๋Š” ์ปค๋ฐ‹ ์ดํ›„์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๋˜ ๋‚ด์šฉ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๋ฉด์„œ ํŠน์ • ์ปค๋ฐ‹์„ ์ทจ์†Œํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ์ปค๋ฐ‹ ๋กœ๊ทธ์— ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์œผ๋กœ ๊ธฐ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๊ฑฐ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด์ „ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ทจ์†Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

reset์€ ๋˜๋Œ์•„๊ฐ€๊ณ  ์‹ถ์€ ์ปค๋ฐ‹์˜ id์„ ์ž…๋ ฅํ•ด์•ผ ํ–ˆ๋‹ค๋ฉด, revert๋Š” โ€œ์ทจ์†Œํ•˜๊ณ  ์‹ถ์€ ๋Œ€์ƒโ€์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

reset๊ณผ ๋™์ผํ•˜๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ์ดˆ๊ธฐ ์ƒํƒœ์—์„œ revert๋ฅผ ํ–ˆ์„ ๋•Œ์˜ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ./refs/heads/main ํŒŒ์ผ์€ 4๋ฒˆ์งธ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ ๋„ค ๋ฒˆ์งธ ์ปค๋ฐ‹์„ ์ทจ์†Œํ•˜๊ธฐ ์œ„ํ•ด โ€œgit revert c8f866..83โ€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด โ€œba2d4aโ€ฆ7eโ€๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๋ถ€๋Š” ์–ด๋–ป๊ฒŒ ๋ณ€ํ• ๊นŒ์š”?

./refs/heads/main ํŒŒ์ผ์€ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ๋‘ ๋ช…๋ น์–ด ๋ชจ๋‘ ๊ณผ๊ฑฐ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค์˜ ๊ฐœ๋…์ด์ง€๋งŒ, reset์€ ํŠน์ • ์ปค๋ฐ‹ ์ดํ›„์˜ ๋ชจ๋“  ์ž‘์—… ๋‚ด์šฉ์„ ์‚ญ์ œํ•˜๋Š” ํšจ๊ณผ๋ฅผ ํ†ตํ•ด ๊ณผ๊ฑฐ ์ปค๋ฐ‹์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๋ช…๋ น์–ด์ด๊ณ , revert๋Š” ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๋˜ ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ด์ „ ์ปค๋ฐ‹์„ ์ทจ์†Œํ•˜๊ณ  ์ด๋ฅผ ์ƒˆ ์ปค๋ฐ‹์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๋ช…๋ น์–ด๋ผ๊ณ  ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.

์œ„ ์‹ค์Šตํ•œ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ reset, revert๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ์ •๋ฆฌํ•œ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.


๊ธ€์„ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Git์˜ Branch๋ฅผ ์‹œ์ž‘์œผ๋กœ log/diff์˜ ์ฐจ์ด, HEAD ํŒŒ์ผ, merge/rebase์˜ ์ฐจ์ด, reset/revert์˜ ์ฐจ์ด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. Git์˜ ๋‹ค์–‘ํ•œ ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ํŒŒ๊ณ ๋“ค๋ฉด์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ์•Œ๊ฒŒ๋˜๋Š” ์ข‹์€ ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Git์„ ์ด์šฉํ•œ ํ˜‘์—… ์ž‘์—…์—์„œ๋Š” ๋ชฉ์ ๊ณผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๊ฐ ๋ช…๋ น์–ด๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์„ ๋ณด์‹œ๋Š” ๋ถ„๋“ค๋„ ํ•œ๋ฒˆ์ฏค Git์˜ ๋‚ด๋ถ€๋ฅผ ๋ถ„์„ํ•ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋๊นŒ์ง€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

Art Changes Life

๋…ธ๋จธ์Šค์™€ ํ•จ๊ป˜ ์—”ํ„ฐํ…Œํฌ ์‚ฐ์—…์„ ํ˜์‹ ํ•ด๋‚˜๊ฐˆ ๋ฉค๋ฒ„๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฑ„์šฉ ์ค‘์ธ ๊ณต๊ณ  ๋ณด๊ธฐ