[Git] Git Branch์— ๋Œ€ํ•œ ์ดํ•ด์™€ ํ™œ์šฉ

Posted by Euisuk's Dev Log on May 2, 2023

[Git] Git Branch์— ๋Œ€ํ•œ ์ดํ•ด์™€ ํ™œ์šฉ

Git Branch์— ๋Œ€ํ•œ ์ดํ•ด์™€ ํ™œ์šฉ

Git Branch๋Š” Git์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Git Branch๋ž€ ๋ฌด์—‡์ธ์ง€, Git Branch๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  Git Branch๋ฅผ ํ™œ์šฉํ•œ ํ˜‘์—… ๋ฐฉ๋ฒ• ๋“ฑ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • โ€œ๋ชจ๋“  ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๋ธŒ๋žœ์น˜๋ฅผ ์ง€์›ํ•œ๋‹ค. ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ž์ฃผ ์ƒ๊ธด๋‹ค. ์ฝ”๋“œ๋ฅผ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•˜๊ณ  ๋‚˜์„œ ์›๋ž˜ ์ฝ”๋“œ์™€๋Š” ์ƒ๊ด€์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ๋ธŒ๋žœ์น˜๋‹ค.โ€
    โ†ณ ์ถœ์ฒ˜ : Git ๋ธŒ๋žœ์น˜ - ๋ธŒ๋žœ์น˜๋ž€ ๋ฌด์—‡์ธ๊ฐ€
  1. Git Branch๋ž€?

https://digitalvarys.com/git-branch-and-its-operations/

Git Branch๋Š” Git์—์„œ ์ฝ”๋“œ๋ฅผ ๋ถ„๊ธฐํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

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

2.1. ํ˜„์žฌ ๋ธŒ๋žœ์น˜ ์ •๋ณด ํ™•์ธ

1
$ git branch
  • ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๋ธŒ๋žœ์น˜๋Š” * ํ‘œ์‹œ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

  • ์›๊ฒฉ ๋ธŒ๋žœ์น˜๊นŒ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด:
1
$ git branch -a

์˜ˆ์‹œ:

1
$ git branch -a
1
2
3
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main

ํ•ด์„:

  • * main โ†’ ์ง€๊ธˆ ๋‹น์‹ ์€ ๋กœ์ปฌ์˜ main ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.
  • origin/main์€ ์›๊ฒฉ ์ €์žฅ์†Œ(origin) ์— ์žˆ๋Š” main ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
    • ์ฆ‰, GitHub๋‚˜ GitLab์˜ main ๋ธŒ๋žœ์น˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • remotes/origin/HEAD -> origin/main
    • origin์ด๋ผ๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜๋Š” main์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • HEAD๋Š” ๊ทธ ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.

Q. ์ง€๊ธˆ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋žœ์น˜ main์ด origin/main์ด๋ž‘ ๊ฐ™์€ ๊ฑฐ์•ผ?

  • ๐Ÿ‘‰ ์™„์ „ํžˆ ๊ฐ™์ง€๋Š” ์•Š์•„์š”.
    • main: ๋‚ด ์ปดํ“จํ„ฐ(Local) ์— ์žˆ๋Š” ๋ธŒ๋žœ์น˜
    • origin/main: ์›๊ฒฉ ์ €์žฅ์†Œ(Remote) ์— ์žˆ๋Š” ๋ธŒ๋žœ์น˜
      โ†’ ์ฆ‰, ๊ฐ™์€ ์ด๋ฆ„์ด์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณต๊ฐ„์— ์žˆ์Šต๋‹ˆ๋‹ค.
      โ†’ ๊ทธ๋ฆฌ๊ณ , ์šฐ๋ฆฌ๋Š” ์ด๋“ค์„ ์„œ๋กœ ๋™๊ธฐํ™”(push/pull) ํ•˜๋ฉด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณดํ†ต์€ ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค :

1
2
3
4
5
# ์›๊ฒฉ์˜ ์ตœ์‹  ๋‚ด์šฉ์„ ๋‚ด ๋กœ์ปฌ main ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜
$ git pull origin main

# ๋กœ์ปฌ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์›๊ฒฉ main์— ๋ฐ˜์˜
$ git push origin main

Q. ๋‚œ ์˜์‹ฌ์ด ๋งŽ์•„. ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ main์ด ์›๊ฒฉ ๋ธŒ๋žœ์น˜ origin/main๊ณผ ์ •๋ง ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€(๋งค์นญ๋˜๋Š”์ง€) ํ™•์ธํ•˜๊ณ  ์‹ถ์–ด.

  • ๐Ÿ‘‰ git status๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ:

1
$ git status

์ถœ๋ ฅ:

1
2
On branch main
Your branch is up to date with 'origin/main'.

2.2. Git Branch ์ƒ์„ฑ

1
$ git branch <์ƒˆ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

์˜ˆ:

1
$ git branch feature/login

ํ˜น์€ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ „ํ™˜ํ•˜๋ ค๋ฉด:

1
$ git checkout -b feature/login

2.3. Git Branch ์ด๋ฆ„ ๋ณ€๊ฒฝ

1
$ git branch -m <์ƒˆ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ:

1
$ git branch -m feature/login feature/auth

2.4. Git Branch ์‚ญ์ œ

1
$ git branch -d <์‚ญ์ œํ•  ๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

๊ฐ•์ œ ์‚ญ์ œ (๋ณ‘ํ•ฉ ์•ˆ ๋œ ๊ฒฝ์šฐ๋„ ํฌํ•จ):

1
$ git branch -D <์‚ญ์ œํ•  ๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

2.5. Git Branch ์ „ํ™˜

1
$ git checkout <์ „ํ™˜ํ•  ๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

๋˜๋Š” Git 2.23 ์ดํ›„์—๋Š” switch ๋ช…๋ น๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ:

1
$ git switch feature/login

๐Ÿ”ง Git ์‹ค๋ฌด ์˜ˆ์‹œ

โœ… A. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ์ž‘์—… (๊ธฐํš/๊ธฐ๋Šฅ ์‹ ๊ทœ ์ฐฉ์ˆ˜ ์‹œ)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. ๊ธฐ์ค€ ๋ธŒ๋žœ์น˜(main ๋˜๋Š” dev) ์ตœ์‹ ํ™”
$ git checkout main
$ git pull origin main

# 2. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ์ „ํ™˜
$ git checkout -b feat/user-profile

# 3. ์ž‘์—… ํ›„ ์ปค๋ฐ‹
$ git add .
$ git commit -m "โœจ feat: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ์ƒ์„ฑ"

# 4. ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ƒˆ ๋ธŒ๋žœ์น˜ ํ‘ธ์‹œ
$ git push -u origin feat/user-profile

# 5. PR ์ƒ์„ฑ โ†’ ๋ฆฌ๋ทฐ โ†’ Merge โ†’ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

โœ… B. ์›๊ฒฉ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ๊ณ„์†ํ•˜๊ธฐ (๊ธฐ์กด ๋ธŒ๋žœ์น˜ ์ด์–ด๋ฐ›๊ธฐ)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. ์ €์žฅ์†Œ clone (์ฒ˜์Œ ๋ฐ›๋Š” ๊ฒฝ์šฐ)
$ git clone https://github.com/your-org/your-repo.git
$ cd your-repo

# 2. ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ํ™•์ธ
$ git branch -r

# 3. ์ž‘์—…ํ•  ๋ธŒ๋žœ์น˜ checkout (๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ + ์ž๋™ ํŠธ๋ž˜ํ‚น)
$ git checkout feat/user-profile
# ๋˜๋Š” ๋ช…์‹œ์ ์œผ๋กœ
$ git checkout -b feat/user-profile origin/feat/user-profile
# ๋˜๋Š” ์•„๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ๊ฐ€๋Šฅ (์ถ”์ฒœ)
$ git checkout --track origin/feat/user-profile
$ git switch --track origin/feat/user-profile

# 4. ์ž‘์—… ์‹œ์ž‘
$ git pull            # ํ˜น์‹œ ์ตœ์‹  ์ƒํƒœ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ
$ git status
$ git add .
$ git commit -m "โ™ป๏ธ fix: ํ”„๋กœํ•„ UI ์ˆ˜์ •"

# 5. ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ํ‘ธ์‹œ
$ git push            # ์ด๋ฏธ tracking ์ค‘์ด๋ฉด ๋ธŒ๋žœ์น˜๋ช… ์ƒ๋žต ๊ฐ€๋Šฅ

  1. Git Branch ์ „๋žต

Git Branch ์ „๋žต์€ ํ˜‘์—… ์‹œ ๋ธŒ๋žœ์น˜ ๋ช…๋ช… ๊ทœ์น™, ์ƒ์„ฑ/๋ณ‘ํ•ฉ ํ๋ฆ„์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์  ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋Œ€ํ‘œ์ ์ธ 3๊ฐ€์ง€ ์ „๋žต์ž…๋‹ˆ๋‹ค.

3.1. Git Flow ์ „๋žต

๊ตฌ์„ฑ:

  • main: ์‹ค์ œ ์šด์˜ ์ค‘์ธ ์ฝ”๋“œ (๋ฐฐํฌ์šฉ)
  • develop: ๊ฐœ๋ฐœ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜
  • feature/๊ธฐ๋Šฅ: ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜
  • release/๋ฒ„์ „: ์ถœ์‹œ ์ค€๋น„ ๋ธŒ๋žœ์น˜
  • hotfix/์ด์Šˆ: ์šด์˜ ์ด์Šˆ ๊ธด๊ธ‰ ์ˆ˜์ •
1
2
# ์˜ˆ์‹œ: feature ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
$ git checkout -b feature/search-filter develop

3.2. GitHub Flow ์ „๋žต

  • main์—์„œ ์ง์ ‘ ๋ธŒ๋žœ์น˜๋ฅผ ํŒŒ์„œ ์ž‘์—… ํ›„ Pull Request
  • CI/CD๊ฐ€ ์ž๋™์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ๋ฐฐํฌ ๊ฐ€๋Šฅ
  • ๋น ๋ฅธ ๋ฐ˜๋ณต๊ณผ ๊ฐ„๊ฒฐํ•œ ๊ตฌ์กฐ์— ์ ํ•ฉ

3.3. GitLab Flow ์ „๋žต

  • GitLab Flow๋Š” GitHub Flow์™€ Git Flow์˜ ์ค‘๊ฐ„ ํ˜•ํƒœ
  • main, production, feature, bugfix, release ๋ธŒ๋žœ์น˜๋ฅผ ํ˜ผํ•ฉ์ ์œผ๋กœ ์šด์šฉ
  • ํ™˜๊ฒฝ(branch-to-environment) ๊ธฐ๋ฐ˜ ๋ฐฐํฌ ์—ฐ๊ณ„๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉ๋จ

  1. Git Branch ํ˜‘์—… ๋ฐฉ๋ฒ•

4.1. ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ Git Branch ํ™œ์šฉ

1
2
$ git checkout -b feature/payment
$ git push origin feature/payment
  • GitHub์—์„œ Pull Request ์ƒ์„ฑํ•˜์—ฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์š”์ฒญ
  • main ๋˜๋Š” develop ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „ ๋ฆฌ๋ทฐ ํ•„์ˆ˜

4.2. ํŒ€ ํ˜‘์—…์—์„œ ๋ธŒ๋žœ์น˜ ๊ทœ์น™ ์˜ˆ์‹œ

๋ธŒ๋žœ์น˜ ํƒ€์ž… ๋ช…๋ช… ๊ทœ์น™ ์šฉ๋„
๊ธฐ๋Šฅ ์ถ”๊ฐ€ feature/<๊ธฐ๋Šฅ๋ช…> ์ƒˆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
๋ฒ„๊ทธ ์ˆ˜์ • bugfix/<์ด์Šˆ๋ช…> ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ ์ˆ˜์ •
๊ธด๊ธ‰ ํŒจ์น˜ hotfix/<์ด์Šˆ๋ช…> ์šด์˜ ์ค‘ ๊ธด๊ธ‰ ์ˆ˜์ •
๋ฐฐํฌ ์ค€๋น„ release/<๋ฒ„์ „> QA ๋ฐ ๋ฐฐํฌ ์ „ ์ตœ์ข… ๊ฒ€์ˆ˜์šฉ ๋ธŒ๋žœ์น˜
์‹คํ—˜/๊ฐœ์ธ ํ…Œ์ŠคํŠธ experiment/<์ฃผ์ œ> ์‹คํ—˜์  ์ฝ”๋“œ ํ…Œ์ŠคํŠธ

  1. ๋ฐœ์ƒ ๊ฐ€๋Šฅ ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

5.1. ์ถฉ๋Œ ๋ฐœ์ƒ ์˜ˆ์‹œ ๋ฐ ํ•ด๊ฒฐ

1
2
Auto-merging app.py
CONFLICT (content): Merge conflict in app.py

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  1. app.py ํŒŒ์ผ์„ ์—ด์–ด <<<<<<<, =======, >>>>>>> ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์„ ํ™•์ธ
  2. ์›ํ•˜๋Š” ์ฝ”๋“œ๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€ ์‚ญ์ œ
  3. ์ˆ˜์ • ํ›„ add & commit:
1
2
$ git add app.py
$ git commit -m "Resolve merge conflict in app.py"

  1. Git ์ถฉ๋Œ ํ•ด๊ฒฐ ์‹ค์Šต๊ณผ rebase vs merge ๋น„๊ต

6.1. ์ถฉ๋Œ(Conflict)์ด๋ž€?

Git์—์„œ ์ถฉ๋Œ(conflict) ์€ ๋‘ ๋ธŒ๋žœ์น˜์—์„œ ๋™์ผํ•œ ํŒŒ์ผ์˜ ๊ฐ™์€ ๋ผ์ธ์„ ์ˆ˜์ •ํ•˜๊ณ  ๋ณ‘ํ•ฉํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Git์€ ์–ด๋–ค ๋ณ€๊ฒฝ์„ ์ ์šฉํ•ด์•ผ ํ• ์ง€ ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


6.2. ์‹ค์Šต ์˜ˆ์ œ: ์ถฉ๋Œ ์ƒํ™ฉ ๋งŒ๋“ค๊ธฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# main ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ๋กœ์šด ํŒŒ์ผ ์ƒ์„ฑ
$ git checkout -b main
$ echo "console.log('Hello from main');" > app.js
$ git add app.js
$ git commit -m "Main: Add greeting message"

# feature ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •
$ git checkout -b feature
$ echo "console.log('Hello from feature');" > app.js
$ git commit -am "Feature: Update greeting message"

# main ๋ธŒ๋žœ์น˜์—์„œ ๋‹ค๋ฅธ ๋‚ด์šฉ์œผ๋กœ ์ˆ˜์ •
$ git checkout main
$ echo "console.log('Hello from MAIN branch');" > app.js
$ git commit -am "Main: Change greeting message"

์ด์ œ feature ๋ธŒ๋žœ์น˜๋ฅผ main์— ๋ณ‘ํ•ฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.


6.3. ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐ ๋ณ‘ํ•ฉ

1
2
3
# feature ๋ธŒ๋žœ์น˜์—์„œ main ๋ณ‘ํ•ฉ ์‹œ๋„
$ git checkout feature
$ git merge main

์ถœ๋ ฅ:

1
2
3
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.

app.js ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ถฉ๋Œ ๋งˆ์ปค๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
<<<<<<< HEAD
console.log('Hello from feature');
=======
console.log('Hello from MAIN branch');
>>>>>>> main

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  1. ์›ํ•˜๋Š” ์ฝ”๋“œ๋งŒ ๋‚จ๊ธฐ๊ณ  ์ˆ˜์ •:
1
console.log('Hello from BOTH branches');
  1. ์ˆ˜์ • ํ›„ ์ €์žฅ, add & commit
1
2
$ git add app.js
$ git commit -m "Resolve conflict in app.js"

์ด์ œ ์ถฉ๋Œ์ด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


6.4. Merge vs Rebase

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

6.5. Rebase ์‹ค์Šต

1
2
3
# feature ๋ธŒ๋žœ์น˜์—์„œ main ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ rebase
$ git checkout feature
$ git rebase main

์ค‘๊ฐ„์— ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋™์ผํ•˜๊ฒŒ ์ˆ˜๋™ ํ•ด๊ฒฐ ํ›„:

1
2
$ git add app.js
$ git rebase --continue

์ „์ฒด rebase ์ค‘๋‹จ์€:

1
$ git rebase --abort

โœ… ์ •๋ฆฌ

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