Skip to content

๐Ÿ”ƒ Turtle Run Project Github Flow Guide

JunHyung Cha edited this page Aug 8, 2025 · 3 revisions

GitHub Flow ๋ฐ Branch ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ

TurtleRun ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ GitHub Flow๋ฅผ ๋”ฐ๋ฅด๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

1. GitHub Flow๋ž€?

GitHub Flow๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์›์น™์„ ๋”ฐ๋ฅด๋Š” ๋ธŒ๋žœ์น˜ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์ „๋žต์ž…๋‹ˆ๋‹ค.

  1. main ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ƒˆ๋กœ์šด ์ž‘์—…์€ ํ•ญ์ƒ ๋ณ„๋„์˜ ๋ธŒ๋žœ์น˜(feature branch)์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด Pull Request(PR)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฆฌ๋ทฐ ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด main ๋ธŒ๋žœ์น˜์— mergeํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด main ๋ธŒ๋žœ์น˜์—์„œ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

2. TurtleRun ํ”„๋กœ์ ํŠธ์˜ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ๊ทœ์น™

2-1. ๋ธŒ๋žœ์น˜ ์ „๋žต

  • ๋ธŒ๋žœ์น˜๋Š” main๊ณผ feature branch๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ์ž‘์—…์€ GitHub Project์—์„œ ์ƒ์„ฑ๋œ issue(ํ‹ฐ์ผ“) ๋‹จ์œ„๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํ‹ฐ์ผ“(issue) ํ•˜๋‚˜๋‹น ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ธŒ๋žœ์น˜/PR๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ GitHub issue์—์„œ Create branch๋กœ ์ƒ์„ฑํ–ˆ์„ ๋•Œ์˜ ์ด๋ฆ„(์˜ˆ: 123-fix-login-bug)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2-2. PR ๋ฐ Merge ๊ทœ์น™

  • PR ์ œ๋ชฉ์€ ์ž‘์—… ๋‚ด์šฉ์„ ๊ฐ€์žฅ ์ž˜ ๋‚˜ํƒ€๋‚ด๋Š” commit convention์— ๋งž๋Š” ๋ฉ”์‹œ์ง€๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • PR์€ squash merge๋กœ ๊ด€๋ฆฌํ•˜์—ฌ, main์—๋Š” ํ•˜๋‚˜์˜ ์ปค๋ฐ‹๋งŒ ๋‚จ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

3. ๋ธŒ๋žœ์น˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ (Linear Workflow) โญ๏ธ

์—ฌ๋Ÿฌ ์ž‘์—…์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ, main ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ linearํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์›์น™์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

3-1. ๋ธŒ๋žœ์น˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•

  • ๋‹ค๋ฅธ ์ž‘์—…์— ์˜์กด์„ฑ์ด ์ƒ๊ธฐ๋ฉด, ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋ฅผ base๋กœ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • base branch๊ฐ€ main์— merge๋˜๋ฉด, ์˜์กด ๋ธŒ๋žœ์น˜๋Š” rebase pull์„ ๋ฐ›์•„ main์„ linearํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ๋‹ค์ด์–ด๊ทธ๋žจ (gitGraph)

gitGraph
   commit id: "main"
   branch feat/some-screen
   checkout feat/some-screen
   commit id: "screen ์ž‘์—… 1"
   commit id: "screen ์ž‘์—… 2"
   commit id: "screen ์ž‘์—… 3"
   branch feat/some-other-screen
   checkout feat/some-other-screen
   commit id: "๋‹ค๋ฅธ screen ์ž‘์—… 1"
   commit id: "๋‹ค๋ฅธ screen ์ž‘์—… 2"
   checkout feat/some-screen
   checkout main
   merge feat/some-screen
   checkout feat/some-other-screen
   commit id: "(feat/some-screen ๋ธŒ๋žœ์น˜๊ฐ€ merge๋˜๋ฉด main์œผ๋กœ rebase)"
Loading

์˜ˆ์‹œ 2 (feat/some-screen์ด merge๋˜๊ณ  rebaseํ•œ ์งํ›„)

gitGraph
   commit id: "main"
   commit id: "feat: add some screen"
   branch feat/some-other-screen
   checkout feat/some-other-screen
   commit id: "๋‹ค๋ฅธ screen ์ž‘์—… 1"
   commit id: "๋‹ค๋ฅธ screen ์ž‘์—… 2"
Loading

์˜ˆ์‹œ 3 (feat/some-other-screen๊นŒ์ง€ merge๋œ ์งํ›„)

gitGraph
   commit id: "main"
   commit id: "feat: add some screen"
   commit id: "feat: add some other screen"
Loading

git ๋ช…๋ น์–ด ์˜ˆ์‹œ

# base ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…
git checkout -b feat/some-screen
# ...์ž‘์—… ํ›„ PR & merge...

# ์˜์กด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ (feat/some-screen์—์„œ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ)
git checkout -b feat/some-other-screen
# ...์ž‘์—…...

# feat/some-screen ๋ธŒ๋žœ์น˜๊ฐ€ main์— Squash merge๋œ ํ›„
git checkout feat/some-other-screen
git fetch origin
git rebase origin/main

4. (์„ ํƒ) Sub branch ์ „๋žต

๊ฐœ์ธ์˜ ํŽธ์˜์— ๋”ฐ๋ผ sub branch ์ „๋žต์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ, ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•˜๊ณ  ๋ณ‘๋ชฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ€๊ธ‰์  main๊ณผ feature branch๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

4-1. Sub branch ๊ด€๋ฆฌ ๋ฐฉ์‹

  • ํฐ ์ž‘์—…์€ sub branch๋ฅผ ๋‘๊ณ , ํ•ด๋‹น sub branch์—์„œ ์—ฌ๋Ÿฌ PR์„ squash merge๋กœ ๊ฐ๊ฐ ๋‹จ์ผ ์ปค๋ฐ‹์œผ๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค.
  • sub branch์—๋Š” feature branch PR์ด squash merge๋กœ ํ•ฉ์ณ์ง„ ๋‹จ์ผ ์ปค๋ฐ‹๋“ค๋งŒ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • sub branch๋ฅผ main์— mergeํ•  ๋•Œ๋Š” fast-forward merge๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, feature PR์˜ squash ์ปค๋ฐ‹๋“ค์ด main์— ๊ทธ๋Œ€๋กœ ๋‚จ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ sub branch์— squash commit ์ด์™ธ์˜ ์ปค๋ฐ‹(์ฆ‰, sub branch์—๋งŒ ์กด์žฌํ•˜๋Š” ์ปค๋ฐ‹)์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด, sub branch ์ „์ฒด๋ฅผ squash mergeํ•ด์„œ main์— mergeํ•ฉ๋‹ˆ๋‹ค. (์ด ๊ฒฝ์šฐ, sub branch์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋Š” main์— ๋‚จ์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

Sub branch ๊ด€๋ฆฌ ์˜ˆ์‹œ

1๋‹จ๊ณ„: sub branch ์ƒ์„ฑ ๋ฐ ์ฒซ ๋ฒˆ์งธ feature PR ์ž‘์—…
gitGraph
   commit id: "main"
   branch feature/big-module
   checkout feature/big-module
   branch feature/module-1
   checkout feature/module-1
   commit id: "feat: add module 1"
   commit id: "refactor: refactor something"
Loading
2๋‹จ๊ณ„: ์ฒซ ๋ฒˆ์งธ feature PR์„ sub branch์— squash merge
gitGraph
   commit id: "main"
   branch feature/big-module
   checkout feature/big-module
   commit id: "feat: add module 1"
Loading
3๋‹จ๊ณ„: ๋‘ ๋ฒˆ์งธ feature PR ์ž‘์—… ๋ฐ sub branch์— squash merge
gitGraph
   commit id: "main"
   branch feature/big-module
   checkout feature/big-module
   commit id: "feat: add module 1"
   branch feature/module-2
   checkout feature/module-2
   commit id: "feat: add module 2"
   commit id: "fix: fix some bug"
   commit id: "chore: remove comments"
   checkout feature/big-module
   merge feature/module-2
Loading
4๋‹จ๊ณ„: sub branch๋ฅผ main์— fast-forward merge (์ตœ์ข… ๊ฒฐ๊ณผ)
gitGraph
   commit id: "main"
   commit id: "feat: add module 1"
   commit id: "feat: add module 2"
Loading

โš ๏ธ sub branch์— squash commit ์ด์™ธ์˜ ์ง์ ‘ ์ปค๋ฐ‹์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ fast-forward merge๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ main์—๋Š” feature PR์˜ squash ์ปค๋ฐ‹๋“ค์ด ๊ทธ๋Œ€๋กœ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.

5. ์š”์•ฝ

  • main๊ณผ feature branch ์ค‘์‹ฌ์˜ ๋‹จ์ˆœํ•œ ๋ธŒ๋žœ์น˜ ์ „๋žต์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์ž‘์—…์ด ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ, ๋ธŒ๋žœ์น˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ(Linear Workflow)๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๊ทœ๋ชจ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ sub branch ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ด€๋ฆฌ ๊ทœ์น™์„ ๋ฐ˜๋“œ์‹œ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  PR์€ squash merge๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋˜, sub branch์˜ ๊ฒฝ์šฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ forward merge๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ธŒ๋žœ์น˜ ์˜์กด์„ฑ์€ rebase๋กœ main์„ linearํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Clone this wiki locally