๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Git

Git Commit, Git Branch, Merge, Rebase

by ๋„์บ๋ฆฌ๐Ÿฑ 2022. 10. 12.
๋ฐ˜์‘ํ˜•
https://learngitbranching.js.org/?locale=ko ์‚ฌ์ดํŠธ๋ฅผ ํ†ตํ•œ ๊ณต๋ถ€ ๋ฐ ํ•ด๋‹น ์‚ฌ์ดํŠธ ๋‹ต์•ˆ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.

 

# Git ์ปค๋ฐ‹

> ์ปค๋ฐ‹์€ ์ž‘์—… ์‚ฌํ•ญ์˜ ์Šค๋ƒ…์ƒท์ด์ง€๋งŒ, ํ• ๋•Œ๋งˆ๋‹ค ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. 

๊ฐ ์ปค๋ฐ‹์€ ์ด์ „ ๋ฒ„์ „๊ณผ ๋‹ค์Œ ๋ฒ„์ „์˜ ๋ณ€๊ฒฝ๋‚ด์—ญ(== delta)์„ ์ €์žฅํ•˜๋ฉฐ, ๊ทธ๋ž˜์„œ ์ปค๋ฐ‹๋“ค์€ ๊ทธ ์ปค๋ฐ‹ ์œ„์˜ ๋ถ€๋ชจ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

Answer
$ git commit

$ git commit

 

# Git์—์„œ ๋ธŒ๋žœ์น˜ ์“ฐ๊ธฐ

> ๋ธŒ๋žœ์น˜๋Š” ํŠน์ • ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ฐธ์กฐ(reference) ์ •๋„๋กœ ๊ฐ€๋ณ๋‹ค.

๋‹จ์ˆœํžˆ ๋ธŒ๋žœ์น˜๋Š” ํ•˜๋‚˜์˜ ์ปค๋ฐ‹๊ณผ ๊ทธ ๋ถ€๋ชจ ์ปค๋ฐ‹๋“ค์„ ํฌํ•จํ•˜๋Š” ์ž‘์—… ๋‚ด์—ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ž.

๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ git branch ๋ธŒ๋žœ์น˜๋ช… ํ•˜๋ฉด, ํ˜„์žฌ ์ž‘์—… ์ค‘ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ธŒ๋žœ์น˜๊ฐ“ ์ƒ์„ฑ๋œ๋‹ค.

์ด ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜๊ณ  ์‹ถ์œผ๋ฉด git checkout ๋ธŒ๋žœ์น˜๋ช… ํ•œ๋‹ค.

ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—๋Š” ๋ณ„ํ‘œ๊ฐ€ ๋ถ™์–ด ์žˆ๋‹ค.

Answer
$ git branch bugFix

$ git checkout bugFix

 

# ๋ธŒ๋žœ์น˜์™€ ํ•ฉ์น˜๊ธฐ

> git merge๋Š” ๋‘๊ฐœ์˜ ๋ถ€๋ชจ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน๋ณ„ํ•œ ์ปค๋ฐ‹์„ ๋งŒ๋“ ๋‹ค.

๋‘ ๊ฐœ์˜ ๋ถ€๋ชจ๊ฐ€ ์žˆ๋Š” ์ปค๋ฐ‹์ด๋ผ๋Š” ๊ฒƒ์€ “ํ•œ ๋ถ€๋ชจ์˜ ๋ชจ๋“  ์ž‘์—… ๋‚ด์—ญ” + “๋‚˜๋จธ์ง€ ๋ถ€๋ชจ์˜ ๋ชจ๋“  ์ž‘์—…” + “๋‘ ๋ถ€๋ชจ์˜ ๋ชจ๋“  ๋ถ€๋ชจ์˜ ์ž‘์—…๋‚ด์—ญ”์„ ์˜๋ฏธํ•œ๋‹ค.

bugFix ๋ธŒ๋žœ์น˜๋ฅผ main ๋ธŒ๋žœ์น˜์— merge ํ•˜๊ธฐ

$ git merge bugFix

ํ˜„์žฌ main ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ์ค‘์ด๋‹ˆ main ๋ธŒ๋žœ์น˜์— bugFix ๋ธŒ๋žœ์น˜๋ฅผ ๋จธ์ง€ ํ•œ๋‹ค.

๋จธ์ง€ ๊ฒฐ๊ณผ main์€ ๋‘ ๋ถ€๋ชจ๊ฐ€ ์žˆ๋Š” ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์œ„ ์ƒํƒœ์—์„œ

git checkout bugFix

git merge main

์„ ํ•˜๋ฉด bugFix ๋ธŒ๋žœ์น˜๋กœ ํ˜„์žฌ ํ™œ๋™ ๋ธŒ๋žœ์น˜๊ฐ€ ๋œํ›„, ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— bugFix๊ฐ€ merge๋œ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๊ฐ€ ๋œ๋‹ค.

Answer
$ git branch bugFix

$ git checkout bugFix
$ git commit
$ git checkout main
$ git commit
$ git merge bugFix

 

# Git ๋ฆฌ๋ฒ ์ด์Šค(Rebase)

> ๋ธŒ๋žœ์น˜๋ผ๋ฆฌ ์ž‘์—…์„ ์ ‘๋ชฉํ•˜๋Š” ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋ฆฌ๋ฒ ์ด์Šค(rebase)์ด๋‹ค. 

๋ฆฌ๋ฒ ์ด์Šค๋Š” ์ปค๋ฐ‹๋“ค์„ ๋ชจ์•„์„œ ๋ณต์‚ฌํ•œ ๋’ค, ๋‹ค๋ฅธ ๊ณณ์— ๋–จ๊ถˆ ๋†“๋Š” ๊ฒƒ์ด๋‹ค.

๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ํ•˜๋ฉด ์ปค๋ฐ‹๋“ค์˜ ํ๋ฆ„์„ ๋ณด๊ธฐ ์ข‹๊ฒŒ ํ•œ ์ค„๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ์“ฐ๋ฉด ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹๋กœ๊ทธ์™€ ์ด๋ ฅ์ด ํ•œ๊ฒฐ ๊นจ๋—ํ•ด์ง„๋‹ค.

์ด ์ƒํƒœ์—์„œ, bugFix์˜ ์ž‘์—…์„ main ๋ธŒ๋žœ์น˜ ์œ„๋กœ ์ง์ ‘ ์˜ฎ๊ฒจ ๋†“์œผ๋ฉด ๋‘ ๊ธฐ๋Šฅ์„ ๋”ฐ๋กœ ๊ฐœ๋ฐœ ํ–ˆ์ง€๋งŒ ๋งˆ์น˜ ์ˆœ์„œ ๋Œ€๋กœ ๊ฐœ๋ฐœํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

$ git rebase main

์ด ์ƒํƒœ์—์„œ main๋ธŒ๋žœ์น˜๋ฅผ bugFix๋ธŒ๋žœ์น˜ ์ชฝ์œผ๋กœ ๋ฆฌ๋ฒ ์ด์Šค ํ•˜๋ฉด 

$ git rebase bugFix

์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

Answer
$ git branch bugFix

$ git checkout bugFix
$ git commit
$ git checkout main
$ git commit
$ git checkout bugFix
$ git rebase main



# Git์—์„œ ์—ฌ๊ธฐ์ €๊ธฐ๋กœ ์˜ฎ๊ฒจ ๋‹ค๋‹ˆ๊ธฐ

> ์ปค๋ฐ‹ ํŠธ๋ฆฌ(Commit tree)์—์„œ ์ด๋™ ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์„ ์•„๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•˜๋‹ค.

 HEAD .

HEAD๋Š” ํ˜„์žฌ ์ฒดํฌ์•„์›ƒ๋œ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. 

์ฆ‰ ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ์ปค๋ฐ‹์„ ์˜๋ฏธํ•œ๋‹ค.

HEAD๋Š” ํ•ญ์ƒ ์ž‘์—… ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌ์ผœ์„œ, ์ž‘์—…ํŠธ๋ฆฌ์— ๋ณ€ํ™”๋ฅผ ์ฃผ๋Š” git ๋ช…๋ น์–ด๋“ค์€ ๋Œ€๋ถ€๋ถ„ HEAD๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ HEAD๋Š” ๋ธŒ๋žœ์น˜์˜ ์ด๋ฆ„์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค. ์ปค๋ฐ‹์„ ํ•˜๊ฒŒ ๋˜๋ฉด bugFix์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๊ณ  ์ด ๋ณ€๊ฒฝ์€ HEAD๋ฅผ ํ†ตํ•ด ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

https://kotlinworld.com/272 (< - HEAD๋Š” ํŠน์ • ๋ธŒ๋žœ์น˜์˜ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ด๋‹ค.)

> HEAD๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ : HEAD๋ฅผ ๋ธŒ๋žœ์น˜ ๋Œ€์‹  ์ปค๋ฐ‹์— ๋ถ™์ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

Answer
HEAD๋ฅผ bugfix์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ทธ ์ปค๋ฐ‹์— ๋ถ™์—ฌ๋ผ.

$ git checkout c4

 

# ์ƒ๋Œ€์ฐธ์กฐ(^)

> ์‹ค์ œ๋กœ Git ์‚ฌ์šฉ์‹œ ์œ„ ์ฒ˜๋Ÿผ c4 ์ปค๋ฐ‹ ๊ฐ’์ธ ํ•ด์‹œ๋ฅผ ํ™•์ธํ•˜๋ ค๊ณ  ํ•˜๋ฉด git log๋ฅผ ๊ณ„์† ์ณ์•ผ ํ•œ๋‹ค.

์ปค๋ฐ‹๋“ค์„ ํ•ด์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ๋ž˜์„œ Git์˜ ์ƒ๋Œ€์ฐธ์กฐ๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค.

ํ•œ ๋ฒˆ์— ํ•œ ์ปค๋ฐ‹ ์œ„๋กœ ์›€์ง์ด๋Š” ^ (์บ๋Ÿฟ)

ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ์ปค๋ฐ‹ ์œ„๋กœ ์›€์ง์ด๋Š” ~ (ํ‹ธ๋“œ)

์š”๋ ‡๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

์˜ˆ๋กœ, git checkout main^ ์ด๋ ‡๊ฒŒ ์ณค๋‹ค๋ฉด, main ๋ธŒ๋žœ์น˜์˜ ํ•œ ๋‹จ๊ณ„ ๋ถ€๋ชจ๋กœ HEAD๊ฐ€ ์ด๋™ํ•œ๋‹ค.

Answer
bugFix์˜ ๋ถ€๋ชจ ์ปค๋ฐ‹ ์ฒดํฌ์•„์›ƒ ํ•˜๋ผ(์ƒ๋Œ€ ์ฐธ์กฐ ์‚ฌ์šฉํ•ด๋ผ)

$ git checkout bugFix^


๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€