๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
DevOps
03-branch & merge

1. branch : ํ”„๋กœ์ ํŠธ ๋ณต์‚ฌ๋ณธ

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

์•ˆ์ „ํ•˜๊ฒŒ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ์— ๋จผ์ € ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. git ์•ˆ์—์„  branch ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ๋ณต์‚ฌ๋ณธ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • branch = ํ”„๋กœ์ ํŠธ ๋ณต์‚ฌ๋ณธ

1.1 ํ”„๋กœ์ ํŠธ์— ์ƒˆ ๊ธฐ๋Šฅ ํ•„์š”

ํ”„๋กœ์ ํŠธ ์ƒˆ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด, ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ์ ํŠธ ์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ์„œ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. e.g. ์‡ผํ•‘๋ชฐ์— ์ฟ ํฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Œ


1.2 branch ์ƒ์„ฑ ๋ฐ ์ด๋™

1
# ํ”„๋กœ์ ํŠธ ์‚ฌ๋ณธ 1๊ฐœ ์ƒ์„ฑ
2
# ๐Ÿ“ git branch ๋ธŒ๋žœ์น˜์ด๋ฆ„
3
$ git branch coupon
4
5
# ๋ธŒ๋žœ์น˜ ์ด๋™
6
# ๐Ÿ“ git switch ๋ธŒ๋žœ์น˜์ด๋ฆ„
7
$ git switch coupon
8
9
# ํ˜„์žฌ ๋ธŒ๋žœ์น˜ ์œ„์น˜
10
$ git status
11
On branch coupon

๋‹ค์‹œ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ๋˜๋Œ์•„๊ฐ€๊ณ  ์‹ถ์œผ๋ฉด, git switch main ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์˜ ์„ค์ •์— ๋”ฐ๋ผ main ๋ง๊ณ  master ์ผ ์ˆ˜๋„ ์žˆ์Œ

coupon ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ–ˆ์œผ๋ฉด ๊ฑฐ๊ธฐ์„œ ๊ฐœ๋ฐœํ•˜๊ณ  commit ๋ง˜๋Œ€๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
aaaaaaaaaaa // coupon ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ์ค‘์ž„
1
git add .
2
git commit -m 'ํŒŒ์ผ๋งŒ๋“ค์—ˆ์Œ'

์ €๋ฒˆ ์žฅ๋ถ€ํ„ฐ commit ํ•˜๋˜ ๊ณณ์€ main branch ๋˜๋Š” master branch๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , coupon branch์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์€ ์›๋ž˜ ๋ธŒ๋žœ์น˜์ธ main branch์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

1
git switch main # main ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
2
# coupon ๋ธŒ๋žœ์น˜์—์„œ ๋งŒ๋“  coupon.txt๋Š” ์‚ฌ๋ผ์ง
3
# ์™œ๋ƒํ•˜๋ฉด coupon ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ–ˆ์œผ๋‹ˆ๊นŒ
4
5
# ---------------------------------------------------------------------------
6
# ๐Ÿ“ coupon ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ๋กœ์šด ํŒŒ์ผ ๋งŒ๋“ค์–ด์„œ ์ฝ”๋“œ์งœ๊ณ  commit ๋ช‡๋ฒˆ ํ•ด๋ณด์‹ญ์‹œ์˜ค.
7
# master/main ๋ธŒ๋žœ์น˜์—์„œ๋„ ๊ธฐ์กด ํŒŒ์ผ๋“ค์— commit ๋ช‡๋ฒˆ ํ•ด๋ด…์‹œ๋‹ค.
8
git switch coupon
9
# coupon.txt ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์ˆ˜์ • ํ›„
10
git add .
11
git commit -m 'ํŒŒ์ผ๋งŒ๋“ค์—ˆ์Œ2'
12
13
git switch main
14
# app.txt ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์ˆ˜์ • ํ›„
15
git add .
16
git commit -m 'main๋ธŒ๋žœ์น˜ ์ˆ˜์ •'
17
18
# branch ์™€ commit ๋‚ด์—ญ์„ ํ•œ ๋ˆˆ์— ๊ทธ๋ž˜ํ”„๋กœ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด
19
git log --graph --oneline --all

git log ํ•˜๋ฉด ๋‚˜์˜ค๋Š” HEAD๋Š” ํ˜„์žฌ ์œ„์น˜๋ฅผ ์˜๋ฏธ


2. merge : branch ํ•ฉ์น˜๊ธฐ

branch์—์„œ ์ฝ”๋“œ๋ฅผ ๋‹ค ์ž‘์„ฑํ–ˆ์œผ๋ฉด, ์›๋ณธ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” master ๋˜๋Š” main ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น˜๋Š”๊ฑธ ์ „๋ฌธ์šฉ์–ด๋กœ merge๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

1
git switch main
2
git merge ๋ธŒ๋žœ์น˜๋ช…

merge ํ•˜๊ณ  ์‹ถ์œผ๋ฉด

  1. main/master ๋ธŒ๋žœ์น˜๋กœ ๋‹ค์‹œ ์ด๋™ํ•˜๊ณ 
  2. git merge ๋ธŒ๋žœ์น˜๋ช…์ž…๋ ฅํ•˜๋ฉด ํ•ฉ์ณ์ง‘๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, git merge coupon์ด๋Ÿฌ๋ฉด coupon ๋ธŒ๋žœ์น˜์˜ ์ฝ”๋“œ๋“ค์ด main/master ๋ธŒ๋žœ์น˜์— ํ•ฉ์ณ์ง‘๋‹ˆ๋‹ค.

merge ํ•˜๊ณ  ๋‚˜์„œ git log ์ด๋Ÿฐ๊ฑฐ ํ•ด๋ณด๋ฉด ์ด์˜๊ฒŒ ํ•ฉ์ณ์คฌ๋‹ค๊ณ  ์•Œ๋ ค์ค๋‹ˆ๋‹ค.


2.1 merge conflict(์ถฉ๋Œ)

๊ทผ๋ฐ ํ•ฉ์น (merge) ๋•Œ ์ฃผ์˜์‚ฌํ•ญ์ด ์žˆ๋Š”๋ฐ, master ๋ธŒ๋žœ์น˜์™€ coupon ๋ธŒ๋žœ์น˜์—์„œ ๊ฐ™์€ ํŒŒ์ผ, ๊ฐ™์€ ์ค„์„ ์ˆ˜์ •ํ–ˆ์„ ๊ฒฝ์šฐ merge conflict๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์—๋””ํ„ฐ๋กœ ํ•ด๋‹น ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์ถฉ๋Œ์‚ฌํ•ญ์ด ์ ํ˜€์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ์ค‘ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์ ์šฉํ• ์ง€ ๊ณ ๋ฅด๋ฉด ๋˜๋Š”๋ฐ, <<<< / >>>> / ==== ์ด๋Ÿฐ ์“ธ๋ฐ์—†๋Š” ๊ฒƒ๋“ค์€ ๋‹ค ์ง€์šฐ๊ณ  ์›ํ•˜๋Š” ์ฝ”๋“œ๋งŒ ๋‚จ๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (VSCode ์—๋””ํ„ฐ์˜ ๊ฒฝ์šฐ Accept Incoming Change ์–ด์ฉŒ๊ตฌ ๋ฒ„ํŠผ๋“ค์„ ์ œ๊ณตํ•ด์ฃผ๋Š”๋ฐ ๊ทธ๊ฑฐ ๋ˆ„๋ฅด๋ฉด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค)

์–ด๋–ค ์ฝ”๋“œ๋ฅผ ๋‚จ๊ธธ์ง€ ๊ฒฐ์ •ํ–ˆ์œผ๋ฉด

1
# git add ํŒŒ์ผ๋ช…
2
# git commit -m '๋ฉ”์„ธ์ง€'
3
4
git add .
5
git commit -m '์ถฉ๋Œ ํ•ด๊ฒฐ'

์ž…๋ ฅํ•˜๋ฉด ์ƒˆ๋กœ์šด commit ์„ ์ƒ์„ฑํ•ด์ฃผ๋ฉฐ merge conflict ํ•ด๊ฒฐ + ๋ธŒ๋žœ์น˜ ํ•ฉ์น˜๊ธฐ ์™„๋ฃŒ์ž…๋‹ˆ๋‹ค.


3. ์ •๋ฆฌโญ

1
git branch ๋ธŒ๋žœ์น˜๋ช… # ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
2
git switch ๋ธŒ๋žœ์น˜๋ช… # ๋ธŒ๋žœ์น˜ ์ด๋™
3
4
# ๋ธŒ๋žœ์น˜ ํ•ฉ์น˜๊ธฐ๋Š” main/master ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ ํ›„
5
git merge ๋ธŒ๋žœ์น˜๋ช… # ๋ธŒ๋žœ์น˜ ํ•ฉ์น˜๊ธฐ
6
7
# ๋ธŒ๋žœ์น˜๋งˆ๋‹ค commit ๋‚ด์—ญ์„ ๊ทธ๋ž˜ํ”„๋กœ ๋ณด๊ณ ์‹ถ์œผ๋ฉด
8
git log --graph --oneline --all
9
10
# ๋ธŒ๋žœ์น˜ ํ•ฉ์น  ๋•Œ conflict๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด
11
# ํŒŒ์ผ์—ด์–ด์„œ ์ˆ˜์ • ํ›„ git add, git commit
12
git add ํŒŒ์ผ๋ช…
13
git commit -m '๋ฉ”์„ธ์ง€'