GIT - Mai-Nova/AIssue-Overview GitHub Wiki

์ฃผ์ œ

๋ฌธ์ œ

  1. git conflict๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋‚ฌ๋‹ค.

    1-1. merge ํ•  ๋•Œ PR์—์„œ conflict ๋‚œ ๊ฒฝ์šฐ

    1-2. branch๋ฅผ ๊ธฐ์กด์˜ branch์—์„œ ๋ถ„๊ธฐํ•ด์„œ ์ƒˆ๋กœ ํŒŒ๋Š” ๊ฒฝ์šฐ

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

1-1. push ํ•˜๊ธฐ ์ „ ๋งˆ์ง€๋ง‰ ์‹คํ–‰(Postman)

  • merge๋ฅผ ํ•จ์œผ๋กœ์„œ side effect ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ์˜ ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋˜๋Š”์ง€ ๋จผ์ € ํ™•์ธํ•œ๋‹ค โ†’ ์‹คํ–‰๋„ ์‹œ์ผœ๋ณด๊ธฐ

1-1. ์ž‘์€ ๋‹จ์œ„๋กœ ์ˆ˜์ •ํ–ˆ์œผ๋ฉด commit์„ ํ•œ๋‹ค โ†’ ๋”ํ•ด์„œ PR ์„ ์ž‘๊ฒŒ ์ž์ฃผ ๋‚ ๋ฆฐ๋‹ค.

1-2. ์ƒˆ ์ž‘์—…์€ ํ•ญ์ƒ main์—์„œ ์‹œ์ž‘ํ•˜๋˜, ๋ฐ˜๋“œ์‹œ git pull origin main์œผ๋กœ ์ตœ์‹ ํ™” ํ›„ ๋ธŒ๋žœ์น˜ ํŒŒ๊ธฐ! (์ฐธ๊ณ  - ๋ธŒ๋žœ์น˜ ๋ถ„๊ธฐ์ชฝ ๋ณด๊ธฐ)

1-2. ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ํŒŒ๋Š” ๊ฒฝ์šฐ๋Š” ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๋‚ด์šฉ์„ ์ด์–ด์„œ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์„ธ๋ถ„ํ™”

0. ํŒŒ์ผ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด

image.png

  • ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์€ ํฌ๊ฒŒ Tracked(๊ด€๋ฆฌ๋Œ€์ƒ์ž„)์™€ Untracked(๊ด€๋ฆฌ๋Œ€์ƒ์ด ์•„๋‹˜)๋กœ ๋‚˜๋ˆˆ๋‹ค.
  • Tracked ํŒŒ์ผ์€ ์ด๋ฏธ ์Šค๋ƒ…์ƒท์— ํฌํ•จ๋ผ ์žˆ๋˜ ํŒŒ์ผ์ด๋‹ค. Tracked ํŒŒ์ผ์€ ๋˜ Unmodified(์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ)์™€ Modified(์ˆ˜์ •ํ•จ) ๊ทธ๋ฆฌ๊ณ  Staged(์ปค๋ฐ‹์œผ๋กœ ์ €์žฅ์†Œ์— ๊ธฐ๋กํ• ) ์ƒํƒœ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด Git์ด ์•Œ๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€ ํŒŒ์ผ์€ ๋ชจ๋‘ Untracked ํŒŒ์ผ์ด๋‹ค. Untracked ํŒŒ์ผ์€ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ ์ค‘ ์Šค๋ƒ…์ƒท์—๋„ Staging Area์—๋„ ํฌํ•จ๋˜์ง€ ์•Š์€ ํŒŒ์ผ์ด๋‹ค. ์ฒ˜์Œ ์ €์žฅ์†Œ๋ฅผ Clone ํ•˜๋ฉด ๋ชจ๋“  ํŒŒ์ผ์€ Tracked์ด๋ฉด์„œ Unmodified ์ƒํƒœ์ด๋‹ค. ํŒŒ์ผ์„ Checkout ํ•˜๊ณ  ๋‚˜์„œ ์•„๋ฌด๊ฒƒ๋„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ์ดํ›„ ์•„์ง ์•„๋ฌด๊ฒƒ๋„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์–ด๋–ค ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด Git์€ ๊ทธ ํŒŒ์ผ์„ Modified ์ƒํƒœ๋กœ ์ธ์‹ํ•œ๋‹ค. ์‹ค์ œ๋กœ ์ปค๋ฐ‹์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ Staged ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ณ , Staged ์ƒํƒœ์˜ ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•œ๋‹ค. ์ด๋Ÿฐ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ณ„์† ๋ฐ˜๋ณตํ•œ๋‹ค

์ƒํƒœ

ํŒŒ์ผ์ด ์–ด๋””์— ์œ„์น˜ํ•œ์ง€ ํ™•์ธ

  • Changes to be committed:Staged ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Changes not staged for commit : ์ด๊ฒƒ์€ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์ด Tracked ์ƒํƒœ์ด์ง€๋งŒ ์•„์ง Staged ์ƒํƒœ๋Š” ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์‹œ ์ƒํ™ฉ

  • Staged ์ƒํƒœ์ด๋ฉด์„œ ๋™์‹œ์— Unstaged ์ƒํƒœ : git add ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด Git์€ ํŒŒ์ผ์„ ๋ฐ”๋กœ Staged ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค. ์ง€๊ธˆ ์ด ์‹œ์ ์—์„œ ์ปค๋ฐ‹์„ ํ•˜๋ฉด git commit ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์˜ ๋ฒ„์ „์ด ์ปค๋ฐ‹๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋งˆ์ง€๋ง‰์œผ๋กœ git add ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ๋ฒ„์ „์ด ์ปค๋ฐ‹๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ git add ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„์— ๋˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด git add ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์„œ ์ตœ์‹  ๋ฒ„์ „์„ Staged ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

1. ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ํ™•์ธํ•˜๊ธฐ

  • ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ๋“ฑ๋ก๋œ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋‹จ์ถ• ์ด๋ฆ„์„ ๋ณด์—ฌ์ค€๋‹ค.

๋‚ด์šฉ

git remote

๊ฒฐ๊ณผ

origin

- ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ origin ํ™•์ธํ•˜๊ธฐ

git remote show <๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ด๋ฆ„> ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ URL๊ณผ ์ถ”์ ํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ด ๋ช…๋ น์€ git pull ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ master ๋ธŒ๋žœ์น˜์™€ Merge ํ•  ๋ธŒ๋žœ์น˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ณด์—ฌ ์ค€๋‹ค. git pull ๋ช…๋ น์€ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ๋ธŒ๋žœ์น˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚˜์„œ ์ž๋™์œผ๋กœ Merge ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์ ธ์˜จ ๋ชจ๋“  ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ •๋ณด๋„ ์ถœ๋ ฅํ•œ๋‹ค. ๋ธŒ๋žœ์น˜๋ช…์„ ์ƒ๋žตํ•˜๊ณ  git push ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ์–ด๋–ค ๋ธŒ๋žœ์น˜๊ฐ€ ์–ด๋–ค ๋ธŒ๋žœ์น˜๋กœ Push ๋˜๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค. ๋˜ ์•„์ง ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์€ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€, ์„œ๋ฒ„์—์„œ๋Š” ์‚ญ์ œ๋์ง€๋งŒ ์•„์ง ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋Š” ์–ด๋–ค ๊ฒƒ์ธ์ง€, git pull ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ Merge ํ•  ๋ธŒ๋žœ์น˜๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.

๋‚ด์šฉ

git remote show origin

๊ฒฐ๊ณผ

remote origin
Fetch URL: https://github.com/Mai-Nova/AIssue-BE-Express.git
Push URL: https://github.com/Mai-Nova/AIssue-BE-Express.git
HEAD branch: main
Remote branches:
    backup/feature-repository tracked
    feature/DBconnect tracked
    feature/login tracked
    feature/repository tracked
    main tracked
Local branches configured for 'git pull':
   feature/database merges with remote feature/database
   feature/repository merges with remote feature/repository
   main merges with remote main
Local refs configured for 'git push':
   feature/repository pushes to feature/repository (up to date)
   main pushes to main (local out of date)

stale (use 'git remote prune' to remove)

  • stale(์ง€์—ฐ๋œ ๋ธŒ๋žœ์น˜ ์ฐธ์กฐ) : ๋”์ด์ƒ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฐธ์กฐ(refs)๋ฅผ ๋งํ•œ๋‹ค.
  • ์›๊ฒฉ ์ €์žฅ์†Œ(origin)์—์„œ๋Š” feature/repository-merge ๋ธŒ๋žœ์น˜๋ฅผ ์‚ญ์ œํ–ˆ์ง€๋งŒ
  • ๋กœ์ปฌ์˜ .git/refs/remotes/origin/ ๋””๋ ‰ํ„ฐ๋ฆฌ์—๋Š” ์—ฌ์ „ํžˆ ๋‚จ์•„ ์žˆ๋Š” ๊ฒฝ์šฐ

2. ๋ช…๋ น์–ด ์ •๋ฆฌ

git remote prune origin

๋กœ์ปฌ์— ๋‚จ์•„ ์žˆ๋Š” stale ์›๊ฒฉ ๋ธŒ๋žœ์น˜๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ๋ช…๋ น์–ด

  • ๋‚ด๋ถ€ ๋™์ž‘
    • .git/refs/remotes/origin/์— ์žˆ๋Š” ๋ธŒ๋žœ์น˜ ์ค‘, ์‹ค์ œ ์›๊ฒฉ ์ €์žฅ์†Œ(origin)์—์„œ ์‚ฌ๋ผ์ง„ ๋ธŒ๋žœ์น˜๋“ค์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

git add

  • ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์•„๊ทœ๋จผํŠธ๋กœ ๋ฐ›๋Š”๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ๋ฉด ์•„๋ž˜์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ๋“ค๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

git diff

  • ์–ด๋–ค ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋๋Š”์ง€ ์‚ดํŽด๋ณด๋ ค๋ฉด ์“ด๋‹ค
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปค๋ฐ‹ํ•œ ํ›„์— ์ˆ˜์ •ํ•œ ๊ฒƒ๋“ค ์ „๋ถ€๋ฅผ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  • Unstaged ์ƒํƒœ์ธ ๊ฒƒ๋“ค๋งŒ ๋ณด์—ฌ์ค€๋‹ค.
  • ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ ๋ชจ๋‘ Staging Area์— ๋„ฃ์—ˆ๋‹ค๋ฉด git diff ๋ช…๋ น์€ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋งŒ์•ฝ ์ปค๋ฐ‹ํ•˜๋ ค๊ณ  Staging Area์— ๋„ฃ์€ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ๋ถ€๋ถ„์„ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด git diff --staged ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋ช…๋ น์€ ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•œ ๊ฒƒ๊ณผ Staging Area์— ์žˆ๋Š” ๊ฒƒ์„ ๋น„๊ตํ•œ๋‹ค. Staged ์ƒํƒœ์ธ ํŒŒ์ผ์€ git diff --cached ์˜ต์…˜์œผ๋กœ ํ™•์ธํ•œ๋‹ค. --staged ์™€ --cached ๋Š” ๊ฐ™์€ ์˜ต์…˜์ด๋‹ค.

git rebase

  • rebase ๋ช…๋ น์œผ๋กœ ํ•œ ๋ธŒ๋žœ์น˜์—์„œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • https://git-scm.com/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-Rebase-%ed%95%98%ea%b8%b0#_rebasing
  • ์ผ๋ฐ˜์ ์ธ ํ•ด๋‹ต์„ ๊ตณ์ด ๋“œ๋ฆฌ์ž๋ฉด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•  ๋•Œ๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ Rebase ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋ฆฌ๋ชจํŠธ ๋“ฑ ์–ด๋”˜๊ฐ€์— Push๋กœ ๋‚ด๋ณด๋‚ธ ์ปค๋ฐ‹์— ๋Œ€ํ•ด์„œ๋Š” ์ ˆ๋Œ€ Rebase ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.

git patch

  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ(diff) ์„ ํŒŒ์ผ๋กœ ์ €์žฅํ•œ ๊ฒƒ
  • ์–ด๋–ค ์ปค๋ฐ‹์ด๋‚˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    • ex) ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ .diff ํŒŒ์ผ๋กœ ์ €์žฅ
git diff > my-change.patch

git stash

  • Stash ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ๋“ค๋งŒ ์ €์žฅํ•œ๋‹ค.
  • Stash๋Š” Modified์ด๋ฉด์„œ Tracked ์ƒํƒœ์ธ ํŒŒ์ผ๊ณผ Staging Area์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ๋ณด๊ด€ํ•ด๋‘๋Š” ์žฅ์†Œ๋‹ค.
  • git stash list : ์ €์žฅํ•œ stash ํ™•์ธ
  • git stash branch <๋ธŒ๋žœ์น˜> ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด Stash ํ•  ๋‹น์‹œ์˜ ์ปค๋ฐ‹์„ Checkout ํ•œ ํ›„ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ์ ์šฉํ•œ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์„ฑ๊ณตํ•˜๋ฉด Stash๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

git refs

  • โ€œReferencesโ€ ๋˜๋Š” โ€œRefsโ€ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • Git ๋‚ด๋ถ€์—์„œ ์ปค๋ฐ‹ ๊ฐ์ฒด๋“ค์„ ์ฐธ์กฐํ•˜๋Š” ํฌ์ธํ„ฐ ์‹œ์Šคํ…œ
๊ฒฝ๋กœ ์„ค๋ช…
.git/refs/heads/ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋“ค
.git/refs/remotes/origin/ ์›๊ฒฉ ๋ธŒ๋žœ์น˜๋“ค
.git/refs/tags/ ํƒœ๊ทธ๋“ค
  • ์–ด๋–ค ์ปค๋ฐ‹ 1a410e ์ด์ „์˜ ๋ชจ๋“  ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด๋ ค๋ฉด git log 1a410e ๋ผ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ์ „ํžˆ 1a410e ๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค. SHA-1 ๊ฐ’์„ ๋‚ ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค ์‰ฌ์šด ์ด๋ฆ„์œผ๋กœ ๋œ ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๊ฑธ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋” ์ข‹๋‹ค. ์™ธ์šฐ๊ธฐ ์‰ฌ์šด ์ด๋ฆ„์œผ๋กœ ๋œ ํŒŒ์ผ์— SHA-1 ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  • ์ด SHA-1 ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ํŒŒ์ผ์€ .git/refs ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋‹ค. ์˜ˆ์ œ์˜ ํ”„๋กœ์ ํŠธ์—๋Š” ์•„์ง .git/refs ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ํŒŒ์ผ์€ ์—†๊ณ  ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ๋ช‡ ๊ฐœ ์žˆ๋‹ค

โ€”set-upstream-to

๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋ฅผ ์›๊ฒฉ ๋ธŒ๋žœ์น˜์— ๋ช…์‹œ์ ์œผ๋กœ ์—ฐ๊ฒฐ(upstream ์„ค์ •)

git branch --set-upstream-to=origin/main main

๊ด€๋ จ ๋ช…๋ น์–ด

git push -u origin feature/mybranch

โ†’ ์ฒ˜์Œ pushํ•˜๋ฉด์„œ ์ž๋™์œผ๋กœ upstream ์—ฐ๊ฒฐ (-u = --set-upstream)

โ€”orphan

์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์—†๋Š” ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ

# master/main ๋ธŒ๋žœ์น˜๋ฅผ ์ดˆ๊ธฐํ™” (index ๋ฐ working directory ํฌํ•จ ์™„์ „ ์ดˆ๊ธฐํ™”)
git checkout --orphan wiki
git add -A
git commit -m "Initial commit"

์›๊ฒฉ ์ €์žฅ์†Œ ๊ฐ•์ œ ํ‘ธ์‹œ(๋ชจ๋“  ์ปค๋ฐ‹ , ์ปค๋ฐ‹ ์ด๋ ฅ ์‚ญ์ œ)

git push -f origin main

git origin์— ์žˆ๋Š” master ์ง€์šฐ๊ธฐ

git push origin --delete master

์ฐธ๊ณ  - ๋ธŒ๋žœ์น˜ ๋ถ„๊ธฐ

1. ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ํŒŒ๋Š” ๊ฒฝ์šฐ

git checkout -b feature/login
  • ํ˜„์žฌ ๋ธŒ๋žœ์น˜(์˜ˆ: develop, feature/xyz)์—์„œ ๋ฐ”๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐ
  • ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๋‚ด์šฉ์„ ์ด์–ด์„œ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์„ธ๋ถ„ํ™”ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ

์˜ˆ์‹œ ์ƒํ™ฉ

  • feature/repository์—์„œ ์„ธ๋ถ€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  feature/repository-validation์„ ๋งŒ๋“ค ๋•Œ
  • ๋‹ค๋ฅธ ํŒ€์›์ด ์ž‘์—… ์ค‘์ธ ๋ธŒ๋žœ์น˜๋ฅผ ์ด์–ด๋ฐ›์•„ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋„ฃ์„ ๋•Œ

2. main (๋˜๋Š” develop)์—์„œ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ํŒŒ๋Š” ๊ฒฝ์šฐ

git checkout main
git pull origin main
git checkout -b feature/signup
  • ํ•ญ์ƒ ์ตœ์‹ ์˜ ์•ˆ์ •๋œ ์ฝ”๋“œ(main) ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‹œ์ž‘
  • ๋ฒ„๊ทธ ์ˆ˜์ •, ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, hotfix ๋“ฑ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋จ

์˜ˆ์‹œ ์ƒํ™ฉ

  • ์ƒˆ ๊ธฐ๋Šฅ ์‹œ์ž‘ํ•  ๋•Œ (ex. feature/payment)
  • ๊ธด ์ž‘์—… ํ›„ ์ฝ”๋“œ๊ฐ€ ๊ผฌ์˜€์„ ๊ฐ€๋Šฅ์„ฑ ์žˆ์„ ๋•Œ, ๊นจ๋—ํ•œ ์ถœ๋ฐœ์ ์ด ํ•„์š”ํ•  ๋•Œ

์ถ”์ฒœ ์Šต๊ด€

์ƒˆ ์ž‘์—…์€ ํ•ญ์ƒ main์—์„œ ์‹œ์ž‘ํ•˜๋˜, ๋ฐ˜๋“œ์‹œ git pull origin main์œผ๋กœ ์ตœ์‹ ํ™” ํ›„ ๋ธŒ๋žœ์น˜ ํŒŒ๊ธฐ!

์ฐธ๊ณ  - Git Flow vs Github Flow

1. Git Flow (๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ)

Vincent Driessen์ด ๋งŒ๋“  ์ „๋žต (2010).

๋ฒ„์ „ ๋ฆด๋ฆฌ์ฆˆ ์ค‘์‹ฌ, ๋ธŒ๋žœ์น˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋‰จ.

์ฃผ์š” ๋ธŒ๋žœ์น˜

๋ธŒ๋žœ์น˜ ์šฉ๋„
main ์‹ค์ œ ๋ฐฐํฌ๋˜๋Š” ์•ˆ์ •๋œ ๋ฒ„์ „
develop ๋‹ค์Œ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ์œ„ํ•œ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜
feature/* ์ƒˆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์šฉ ๋ธŒ๋žœ์น˜ (feature/login)
release/* ๋ฐฐํฌ ์ค€๋น„์šฉ ๋ธŒ๋žœ์น˜ (release/1.0.0)
hotfix/* ๋ฐฐํฌ ํ›„ ๊ธด๊ธ‰ ์ˆ˜์ • ๋ธŒ๋žœ์น˜ (hotfix/critical-bug)

ํ๋ฆ„ ์š”์•ฝ

  1. main์—์„œ develop ๋ถ„๊ธฐ
  2. develop์—์„œ feature/* ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ โ†’ ์™„๋ฃŒ๋˜๋ฉด develop์— ๋จธ์ง€
  3. ๋ฆด๋ฆฌ์ฆˆ ์ค€๋น„ ์‹œ release/* ์ƒ์„ฑ โ†’ ํ…Œ์ŠคํŠธ ํ›„ main๊ณผ develop์— ๋ณ‘ํ•ฉ
  4. ์šด์˜ ์ค‘ ๋ฒ„๊ทธ๋Š” hotfix/*์—์„œ ๊ณ ์น˜๊ณ  โ†’ main๊ณผ develop์— ๋ณ‘ํ•ฉ

์žฅ์ 

  • ์—ญํ• ์ด ๋ช…ํ™• โ†’ ๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ฆฌ, QA, hotfix ๊ตฌ๋ถ„์ด ์‰ฌ์›€
  • ์ค‘๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ, ๋ฒ„์ „ ๊ด€๋ฆฌ, ๊ธด ๊ฐœ๋ฐœ์ฃผ๊ธฐ์— ์ ํ•ฉ

๋‹จ์ 

  • ๋ธŒ๋žœ์น˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง โ†’ ๊ด€๋ฆฌ ๋ณต์žก
  • ์†Œ๊ทœ๋ชจ ํŒ€, ๋น ๋ฅธ ๋ฐฐํฌ์—๋Š” ๊ณผํ•œ ์ „๋žต

2. GitHub Flow (๋ฏผ์ฒฉํ•œ ๊ฐœ๋ฐœ์— ์ ํ•ฉ)

GitHub์ด ์ œ์•ˆํ•œ ๊ฐ„๋‹จํ•œ ์ „๋žต.

์ง€์†์  ๋ฐฐํฌ(CD) ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋จ.

ํ•ต์‹ฌ ๋ธŒ๋žœ์น˜

๋ธŒ๋žœ์น˜ ์šฉ๋„
main ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ
feature/* ์ž‘์—… ๋ธŒ๋žœ์น˜ (๊ธฐ๋Šฅ, ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ)

ํ๋ฆ„ ์š”์•ฝ

  1. ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ์˜ main ์œ ์ง€ (CI/CD ์—ฐ๋™ ํ•„์ˆ˜)
  2. main์—์„œ feature/abc ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
  3. ์ปค๋ฐ‹ & ํ‘ธ์‹œ โ†’ GitHub PR(Pull Request) ์ƒ์„ฑ
  4. ๋ฆฌ๋ทฐ & ํ…Œ์ŠคํŠธ โ†’ main์— ๋ณ‘ํ•ฉ ํ›„ ์ฆ‰์‹œ ๋ฐฐํฌ

์žฅ์ 

  • ๋‹จ์ˆœ, ๋น ๋ฅธ ์ž‘์—… ํ๋ฆ„
  • ์ž๋™ํ™” ๋ฐฐํฌ(CI/CD)์™€ ์ž˜ ์–ด์šธ๋ฆผ
  • ์Šคํƒ€ํŠธ์—…, ์›น์„œ๋น„์Šค, SaaS์— ์ ํ•ฉ

๋‹จ์ 

  • ๋ฆด๋ฆฌ์ฆˆ ๊ณ„ํš์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋Šฅ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • develop์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ QA๋‚˜ ๊ธฐ๋Šฅ ์กฐํ•ฉ์ด ์–ด๋ ค์›€

ํ•ญ๋ชฉ Git Flow GitHub Flow
์ „๋žต ์„ฑ๊ฒฉ ๋ฆด๋ฆฌ์ฆˆ ์ค‘์‹ฌ ๋ฐฐํฌ ์ค‘์‹ฌ
๋ธŒ๋žœ์น˜ ์ˆ˜ ๋งŽ์Œ (main, develop, feature, release, hotfix) ์ ์Œ (main, feature)
๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ฆฌ ์ฒด๊ณ„์  ์ˆ˜์‹œ ๋ฐฐํฌ
ํ˜‘์—… ๊ทœ๋ชจ ์ค‘๋Œ€ํ˜• ํŒ€ ์†Œํ˜• ํŒ€, ์Šคํƒ€ํŠธ์—…
์ ํ•ฉํ•œ ์ƒํ™ฉ ์ œํ’ˆ ์ถœ์‹œ, ๋ฒ„์ „ ๊ด€๋ฆฌ ์›น์„œ๋น„์Šค, ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ
์ž๋™ํ™”(CI/CD) ์—†์–ด๋„ ๊ฐ€๋Šฅ ๊ฑฐ์˜ ํ•„์ˆ˜

์–ด๋–ค๊ฑธ ์„ ํƒํ•˜๋ฉด ์ข‹์„๊นŒ?

  • ์Šคํƒ€ํŠธ์—…, ๋น ๋ฅธ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ โ†’ GitHub Flow
  • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ, ๋ฆด๋ฆฌ์ฆˆ/QA๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ โ†’ Git Flow
  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ „๋žต๋„ ๊ฐ€๋Šฅ โ†’ main + develop + ๊ฐ„์†Œํ™”๋œ feature
โš ๏ธ **GitHub.com Fallback** โš ๏ธ