branch

  • ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ

git branch (๋ธŒ๋žœ์น˜ ์ด๋ฆ„)
  • ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ํ™•์ธ

git branch
  • ๋ธŒ๋žœ์น˜ ์ด๋™

git switch (๋ธŒ๋žœ์น˜ ์ด๋ฆ„)
  • ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ด๋™

git switch -c (๋ธŒ๋žœ์น˜ ์ด๋ฆ„)
  • ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

git branch -d (๋ธŒ๋žœ์น˜ ์ด๋ฆ„)

๋งŒ์•ฝ ์•„์ง ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์€ ๋‚ด์šฉ์˜ ์ปค๋ฐ‹์ด ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ง€์šธ ๋•Œ๋Š” -d๋Œ€์‹  -D๋กœ ๊ฐ•์ œ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ธŒ๋žœ์น˜ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ

git branch -m (๊ธฐ์กด ๋ธŒ๋žœ์น˜๋ช…) (์ƒˆ ๋ธŒ๋žœ์น˜๋ช…)
  • ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜์˜ ๋‚ด์—ญ ํ™•์ธ(git log๋Š” ์œ„์น˜ํ•œ ๋ธŒ๋žœ์น˜์—์„œ์˜ ๋‚ด์—ญ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.)

git log --all --decorate --oneline --graph

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ ๋ณด๊ธฐ ์ข‹๊ฒŒ ํ‘œํ˜„ํ•ด ์ฃผ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์†Œ์ŠคํŠธ๋ฆฌ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณด๋Š”๊ฒŒ ํ›จ์”ฌ ์ข‹๋‹ค.

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

merge

  • ๋‘ ๋ธŒ๋žœ์น˜๋ฅผ ํ•œ ์ปค๋ฐ‹์— ์ด์–ด๋ถ™์ธ๋‹ค.(mergeํ•œ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹ ์ƒ์„ฑ)

  • main ๋ธŒ๋žœ์น˜์—์„œ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น  ๋•Œ(main๋ธŒ๋žœ์น˜์—์„œ ์‹คํ–‰)

git merge (๋ธŒ๋žœ์น˜ ์ด๋ฆ„)

mergeํ•œ ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์ด๊ธฐ ๋•Œ๋ฌธ์— reset์ด๋‚˜ revert๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.(์˜ˆ๋ฅผ ๋“ค๋ฉด mergeํ•˜๊ธฐ ์ „ ํ•ด๋‹น ๋ธŒ๋žœ์น˜์˜ ๋งˆ์ง€๋ง‰ ์‹œ์ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.)

rebase

  • ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹๋“ค์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ์ด์–ด ๋ถ™์ธ๋‹ค.

  • merge์™€๋Š” ๋ฐ˜๋Œ€๋กœ ๋Œ€์ƒ์ด ๋  ๋ธŒ๋žœ์น˜์—์„œ ์‹คํ–‰ํ•œ๋‹ค.(์„œ๋ธŒ ๋ธŒ๋žœ์น˜์—์„œ ์‹คํ–‰)

git rebase main

๊ทธ๋ฆฌ๊ณ  rebase๋ฅผ ํ•˜๋ฉด main๋ธŒ๋žœ์น˜๊ฐ€ ๋’ค์ณ์ง€๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— merge๋ฅผ ํ†ตํ•ด rebaseํ•œ ๋ธŒ๋žœ์น˜์˜ ์‹œ์ ์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

merge์™€ rebase์ฐจ์ด

  • merge : ๋ธŒ๋žœ์น˜ ์‚ฌ์šฉ๋‚ด์—ญ์„ ๋‚จ๊ธด๋‹ค.(ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋‚จ๋Š”๋‹ค.)

  • rebase : ๋ธŒ๋žœ์น˜๋ฅผ ๊ทธ๋Œ€๋กœ ์ด์–ด๋ถ™์ด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋‚จ์ง€ ์•Š๊ณ  ํ•œ ์ค„๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ํ˜‘์—… ์‹œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Œ.

๋งŒ์•ฝ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น  ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๊ณ  git add ., git commit์œผ๋กœ ๋งˆ๋ฌด๋ฆฌ ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹น์žฅ ์ถฉ๋Œ ํ•ด๊ฒฐ์ด ์–ด๋ ค์šธ ๊ฑฐ ๊ฐ™์œผ๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

git merge --abort
๋˜๋Š”
git rebase --abort

๋˜ํ•œ merge๋Š” ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์œผ๋กœ ์ถฉ๋Œ ํ•ด๊ฒฐ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, rebase๋Š” ์ปค๋ฐ‹๋งˆ๋‹ค ์ถฉ๋Œ ํ•ด๊ฒฐ์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— git rebase --continue๋กœ ์ถฉ๋Œ์ด ๋ชจ๋‘ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

Git์˜ merge ์ „๋žต

Fast-forward

img_1.png
  • main ๋ธŒ๋žœ์น˜์—์„œ dev1์ด ๋ถ„๊ธฐํ•ด ๋‚˜๊ฐ€๋Š” ์ง€์ , ์ฆ‰ ๋‘ ๋ธŒ๋žœ์น˜๊ฐ€ ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปค๋ฐ‹์„ base๋ผ๊ณ  ํ•œ๋‹ค.

  • main๊ณผ dev1์ด ๊ฐ๊ฐ ์ฐธ์กฐํ•˜๋Š” ์ปค๋ฐ‹์€ ๋™์ผ ์„ ์ƒ์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋‹ค. ์ด ๋•Œ ๋‘ ๋ธŒ๋žœ์น˜๋Š” Fast-forward ์ƒํƒœ์— ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

  • Fast-forward ๊ด€๊ณ„์— ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๊ด€๊ณ„์—์„œ git merge ๋ฅผ ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ์ƒ๊ธฐ์ง€ ์•Š๊ณ , ๋’ค์— ์ณ์ง„ ๋ธŒ๋žœ์น˜(main)์˜ ์ฐธ์กฐ ๊ฐœ์ฒด๊ฐ€ ์•ž์„œ ์žˆ๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ์ด๋™์„ ํ•œ๋‹ค.

  • ๋งˆ์น˜ ๋ธŒ๋žœ์น˜๊ฐ€ ์ ํ”„ ํ•˜๋“ฏ ์ƒ๋Œ€ ๋ธŒ๋žœ์น˜ ์ฐธ์กฐ ๊ฐ’์œผ๋กœ ์ด๋™ํ•œ๋‹ค๊ณ  ํ•ด์„œ Fast-forward(๋นจ๋ฆฌ ๊ฐ๊ธฐ)๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

img_2.png

3-way merge

img_3.png
  • ๋‘ ๋ธŒ๋žœ์น˜ ๋ชจ๋‘ base์—์„œ ์ปค๋ฐ‹์„ ์ง„ํ–‰ํ•ด์„œ ๋ถ„๊ธฐํ•œ ๋‚˜๊ฐ„ ์ƒํƒœ๋‹ค. ๋‘ ๋ธŒ๋žœ์น˜ ์ค‘ ์–ด๋А ๊ฒƒ๋„ base์— ์œ„์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ์ด๋ ‡๊ฒŒ ๋‘ ๋ธŒ๋žœ์น˜๊ฐ€ base์—์„œ ๋ถ„๋ฆฌ๋œ ์ปค๋ฐ‹์„ ์ฐธ์กฐํ•  ๋•Œ git merge๋ฅผ ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ์ƒ์„ฑ๋œ๋‹ค. ์ด๊ฒƒ์„ 3-way merge๋ผ๊ณ  ํ•œ๋‹ค.

  • 3-way์ธ ์ด์œ ๋Š” base์™€ ๊ฐ ๋ธŒ๋žœ์น˜ 2๊ฐœ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์ปค๋ฐ‹์„ ๊ธฐ์ค€์œผ๋กœ ๋ณ‘ํ•ฉ์„ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

img_4.png

git merge ์˜ต์…˜๋“ค

git merge -ff (๋ธŒ๋žœ์น˜๋ช…)
  • -ff(fast-forward) ์˜ต์…˜์€ ํ˜„ ๋ธŒ๋žœ์น˜์™€ merge๋Œ€์ƒ ๋ธŒ๋žœ์น˜๊ฐ€ fast-forward ๊ด€๊ณ„์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ธŒ๋žœ์น˜์˜ ์ฐธ์กฐ ๊ฐ’๋งŒ ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•œ๋‹ค.

  • fast-forward ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ฉด merge ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•œ๋‹ค.

git merge --no-ff (๋ธŒ๋žœ์น˜๋ช…)
  • --no-ff(non fast-forward) ์˜ต์…˜์€ merge ๋Œ€์ƒ๊ณผ fast-forward ๊ด€๊ณ„์—ฌ๋„ ๊ฐ•์ œ๋กœ merge ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณ‘ํ•ฉํ•œ๋‹ค.

  • ์ด ๋ช…๋ น์€ ์ƒˆ๋กญ๊ฒŒ ์ƒ๊ธฐ๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜๋Š” ํŽธ์ง‘๊ธฐ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.

  • ์ด ์˜ต์…˜ merging์œผ๋กœ main ๋ธŒ๋žœ์น˜๋ฅผ ๊ด€๋ฆฌํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ํšจ๊ณผ

    • ๋ธŒ๋žœ์น˜ ๊ด€๊ณ„์— ์ƒ๊ด€์—†์ด ํ•„์š”ํ•œ ์ปค๋ฐ‹๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

    • ์–ด๋–ค ๋ธŒ๋žœ์น˜์—์„œ merge๋ฅผ ํ–ˆ๋Š”์ง€ ๊ธฐ๋ก์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

git merge --squash
  • --no-ff ์˜ต์…˜์œผ๋กœ merging์„ ํ•˜๋ฉด ์ƒ๋Œ€ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ๋ช…๋ น์–ด๋‚˜ ์†Œ์ŠคํŠธ๋ฆฌ๋กœ ์–ด๋–ค ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ merging๋˜์—ˆ๋Š”์ง€๋Š” ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • --squash ์˜ต์…˜์€ ๋œป(์ง“๋ˆ„๋ฅด๋‹ค)์ฒ˜๋Ÿผ ๋‹ค์†Œ ๊ฐ•์••์ ์ธ ๋ณ‘ํ•ฉ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ปค๋ฐ‹ ์ด๋ ฅ๊ณผ merge๋œ ๋ธŒ๋žœ์น˜ ์ด๋ ฅ๋„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.

  • ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์— ์ƒ๋Œ€ ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ๋ญ‰์ณ ๋†“๋Š” ๊ทธ๋ฆผ์ด ๋œ๋‹ค.

img_5.png
  • --squash ์˜ต์…˜์€ ๋ธŒ๋žœ์น˜๊ฐ€ ์‚ญ์ œ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

  • ์ƒ๋Œ€ ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹์ด merged commit์„ ์ฐธ์กฐํ•˜์ง€ ์•Š์•„์„œ merging์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ณ , main ๋ธŒ๋žœ์น˜ ๊ด€์ ์—์„œ๋Š” ๋ณ‘ํ•ฉ์— ๋Œ€ํ•œ ์ด๋ ฅ์ด ๋‚จ์ง€ ์•Š๋Š”๋‹ค.

img_6.png

๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์—์„œ ์›ํ•˜๋Š” ์ปค๋ฐ‹ ๊ฐ€์ ธ์˜ค๊ธฐ

git cherry-pick (์ปค๋ฐ‹ ํ•ด์‹œ)
  • ํ•ด๋‹น ์ปค๋ฐ‹์˜ ๋‚ด์šฉ์„ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ์ถ”๊ฐ€ํ•œ๋‹ค. ๋’ค์— ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ์—ฐ์† ์ž…๋ ฅํ•ด์„œ ๋ณต์ˆ˜ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ๋ณต์ˆ˜๋กœ ์ž…๋ ฅํ•  ๋•Œ ์‚ฌ์ด์— ..์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๊ตฌ๊ฐ„์˜ ์ปค๋ฐ‹์„ ํ•œ๋ฒˆ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

    • ์˜ˆ) ์ปค๋ฐ‹1..์ปค๋ฐ‹3 : ์ปค๋ฐ‹1์—์„œ ์ปค๋ฐ‹3๊นŒ์ง€์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ ์šฉํ•œ๋‹ค.

  • git cherry-pick --abort : ์ถฉ๋Œ๊ฐ™์€ ์ƒํ™ฉ์œผ๋กœ cherry-pick์ทจ์†Œ

  • git cherry-pick --continue : ์ถฉ๋Œ๊ฐ™์€ ์ƒํ™ฉ ํ•ด๊ฒฐ ํ›„ cherry-pick ์ง„ํ–‰

๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์—์„œ ํŒŒ์ƒ๋œ ๋ธŒ๋žœ์น˜ ์˜ฎ๊ฒจ๋ถ™์ด๊ธฐ

git rebase --onto (๋„์ฐฉ ๋ธŒ๋žœ์น˜) (์ถœ๋ฐœ ๋ธŒ๋žœ์น˜) (์ด๋™ํ•  ๋ธŒ๋žœ์น˜)
  • ๋„์ฐฉ ๋ธŒ๋žœ์น˜์—๋‹ค๊ฐ€ ์ถœ๋ฐœ ๋ธŒ๋žœ์น˜์—์„œ ํŒŒ์ƒ๋œ ์ด๋™ํ•  ๋ธŒ๋žœ์น˜๋ฅผ ์ด์–ด ๋ถ™์ด๊ฒ ๋‹ค.

  • ์ดํ›„ ์ด๋™ํ•  ๋ธŒ๋žœ์น˜์˜ ํ—ค๋“œ๋กœ fast-forward ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.(merge ๋“ฑ)

๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๊ฐ€์ ธ์˜ค๊ธฐ

git merge --squash (๋Œ€์ƒ ๋ธŒ๋žœ์น˜)
  • ๋Œ€์ƒ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹๋“ค์„ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜จ๋‹ค.

  • ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์ด ์Šคํ…Œ์ด์ง• ๋˜์–ด ์žˆ๋‹ค.

Gitflow

ํ˜‘์—…์„ ์œ„ํ•œ ๋ธŒ๋žœ์นญ ์ „๋žต

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ธŒ๋žœ์น˜๋“ค

๋ธŒ๋žœ์น˜
์šฉ๋„

main

์ œํ’ˆ ์ถœ์‹œ/๋ฐฐํฌ

develop

๋‹ค์Œ ์ถœ์‹œ/๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœ ์ง„ํ–‰

release

์ถœ์‹œ/๋ฐฐํฌ ์ „ ํ…Œ์ŠคํŠธ ์ง„ํ–‰(QA)

feature

๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

hotfix

๊ธด๊ธ‰ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •

img_7.png ์ถœ์ฒ˜

Last updated