๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์—”๋“œ/Git

git branch ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ผ๋•Œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ&ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ •๋ฆฌ

by sh119 2025. 2. 18.

ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ branch๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋กœ์ปฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์ด ๋‚ ๋ผ๊ฐ€๋Š” ์ด์Šˆ๊ฐ€ ์ƒ๊ฒผ๋‹ค.

๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋ฉด์„œ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ ์ด์Šˆ๋“ค๊ณผ ๊ทธ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.

 

๐Ÿ› ๏ธ git pull ์‹œ ์ถฉ๋Œ (Merge Conflict)

์ด์Šˆ

  • ๋กœ์ปฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์ด ์›๊ฒฉ ์ €์žฅ์†Œ(๋ฆฌ๋ชจํŠธ)์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • git pull ์‹œ ์ž๋™ ๋ณ‘ํ•ฉ์ด ์‹คํŒจํ•˜๊ณ , ์ถฉ๋Œ ํ•ด๊ฒฐ์ด ํ•„์š”ํ•จ

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

  1. git status ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํŒŒ์ผ ๋ชฉ๋ก์„ ํ™•์ธ
  2. ํ•ด๋‹น ํŒŒ์ผ์„ ์—ด์–ด <<<<<<< HEAD, =======, >>>>>>> branch_name ๋“ฑ์˜ ์ถฉ๋Œ ํ‘œ์‹œ๋ฅผ ๋ณด๊ณ  ์ง์ ‘ ์ˆ˜์ •
  3. git add "์ถฉ๋Œ ํ•ด๊ฒฐ ํŒŒ์ผ" ์ง„ํ–‰
  4. git commit -m "Resolve merge confilct"์ง„ํ–‰

 

๐Ÿ› ๏ธ git pull ์‹œ fast-forward vs merge commit ๋ฌธ์ œ

์ด์Šˆ

  • git pull ์‹œ fast-forward ๋ณ‘ํ•ฉ๊ณผ merge commit ์ค‘ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ณ‘ํ•ฉํ• ์ง€ ์„ ํƒํ•ด์•ผ ํ•จ
  • merge commit์ด ํ•„์š” ์—†๋Š” ์ƒํ™ฉ์—์„œ๋„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ

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

  • git pull --rebase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ merge commit ์—†์ด ๋ฆฌ๋ฒ ์ด์Šค๋กœ ๊น”๋”ํ•˜๊ฒŒ ๋ณ‘ํ•ฉ ๊ฐ€๋Šฅ:
git pull --rebase

 

๐Ÿ› ๏ธ git push ์‹œ rejected (non-fast-forward)

์ด์Šˆ

  • ๋‹ค๋ฅธ ํŒ€์›์ด ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ, ๋‚ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๊ฐ€ ๋’ค์ฒ˜์ง„ ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • git push ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋œธ: 
  •  
    ! [rejected] main -> main (non-fast-forward)

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

  1. ๋กœ์ปฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์šฐ์„ ์ ์œผ๋กœ ์ปค๋ฐ‹ ๋˜๋Š” ์Šคํƒœ์‹œ
    • git stash
  2. โœจ์ตœ์‹  ์›๊ฒฉ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฐ€์ ธ์˜ค๊ธฐ(--rebase ์‚ฌ์šฉ ์‹œ, ๋‚ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ตœ์‹  ์ปค๋ฐ‹ ์œ„์— ๋‹ค์‹œ ์ ์šฉ๋จ.)
    • git pull --rebase
  3. ์Šคํƒœ์‹œ ๋ณต์› ํ›„ ์ถฉ๋Œ ํ•ด๊ฒฐ (ํ•„์š” ์‹œ)
    • git stash pop
  4. ํ‘ธ์‹œ ์žฌ์‹œ๋„
     

 

๐Ÿ› ๏ธ  git clone ํ›„ git pull ์‹œ "fatal: refusing to merge unrelated histories"

์ด์Šˆ

  • ์„œ๋กœ ๋‹ค๋ฅธ Git ์ด๋ ฅ์„ ๊ฐ€์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ฉ์น˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒ

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

  • --allow-unrelated-histories ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ•์ œ ๋ณ‘ํ•ฉ:
  • ๋‹จ, ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ™•์ธํ•˜๊ณ  ์ •๋ฆฌํ•ด์•ผ ํ•จ
git pull origin main --allow-unrelated-histories

 

 

๐Ÿ› ๏ธ ํŠน์ • ๋ธŒ๋žœ์น˜๋งŒ git pull ํ•˜๋ ค๋Š”๋ฐ ์ „์ฒด ๋ธŒ๋žœ์น˜๊ฐ€ ์—…๋ฐ์ดํŠธ๋จ

์ด์Šˆ

  • git pull ํ•˜๋ฉด fetch + merge๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์›์น˜ ์•Š๋Š” ๋ณ€๊ฒฝ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ.

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

ํŠน์ • ๋ธŒ๋žœ์น˜๋งŒ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด git fetch ํ›„ git merge๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์‹คํ–‰ : 

git fetch origin feature-branch git merge origin/feature-branch

 

๋˜๋Š” ๋‹จ์ˆœํžˆ ์›๊ฒฉ์˜ ์ตœ์‹  ์ƒํƒœ๋งŒ ํ™•์ธํ•˜๋ ค๋ฉด : 

git fetch --prune

 

 

๐Ÿ› ๏ธ ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ ํ›„ ๋กœ์ปฌ์—์„œ git pull ์‹œ ๋ธŒ๋žœ์น˜๊ฐ€ ๋‚จ์•„์žˆ์Œ

์ด์Šˆ

  • ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ญ์ œํ–ˆ๋Š”๋ฐ ๋กœ์ปฌ์—์„œ ์—ฌ์ „ํžˆ ๋ณด์ด๋Š” ๋ฌธ์ œ.

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

  1. ๋กœ์ปฌ์—์„œ ์›๊ฒฉ ์‚ญ์ œ๋œ ๋ธŒ๋žœ์น˜ ์ •๋ฆฌ
     
    git fetch --prune
  2. ํ˜น์€ ์ง์ ‘ ์‚ญ์ œ
     
    git branch -d branch-name

 

๐Ÿ› ๏ธ gitignore ์ ์šฉ์ด ์•ˆ๋จ

์ด์Šˆ

  • .gitignore์— ์ถ”๊ฐ€ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํŠน์ • ํŒŒ์ผ์ด ๊ณ„์† Git์— ํฌํ•จ๋จ.

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

  1. ์ด๋ฏธ Git์— ์ถ”์ ๋œ ํŒŒ์ผ์€ .gitignore์— ์ถ”๊ฐ€ํ•ด๋„ ๋ฌด์‹œ๋˜์ง€ ์•Š์Œ.
    ํ•ด๋‹น ํŒŒ์ผ์„ ์บ์‹œ์—์„œ ์ œ๊ฑฐ ํ›„ ๋‹ค์‹œ .gitignore ์ ์šฉ:
     
    git rm -r --cached <ํŒŒ์ผ๋ช… ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ช…>

๋‹ค์‹œ ์ปค๋ฐ‹ ํ›„ ํ‘ธ์‹œ:

git commit -m "Remove ignored files" git push
 
 
 

๐Ÿ’ก ์˜ค๋Š˜ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ) git pull --rebase๋ฅผ ์ด์šฉ!

์šฐ๋ฆฌ๋Š” dev์— 2๋ช…์ด์ƒ์˜ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์Šน์ธํ•œ ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์ค‘๊ฐ„์— ๊ณ„์† ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ–ˆ๋‹ค.

๊ทธ๋•Œ, ๋‚ด ๋กœ์ปฌ์— ์ƒˆ๋กœ์šด ์ฝ”๋“œ์™€ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ถฉ๋Œํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์ƒ๊ฒผ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  rebase๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ ๋’ค๋ถ€ํ„ฐ๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

rebase์˜ ๋™์ž‘ ๊ณผ์ •  :

  1. ์›๊ฒฉ ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ด (git fetch origin dev)
  2. ๋‚ด ๋กœ์ปฌ ์ปค๋ฐ‹๋“ค์„ ์ž„์‹œ๋กœ ์ €์žฅ (git stash ์™€ ๊ฐ™์€ ํšจ๊ณผ)
  3. ์›๊ฒฉ ๋ธŒ๋žœ์น˜ (origin/dev)๋ฅผ ๋‚ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋กœ Fast-Forward
  4. ์ €์žฅํ•ด ๋‘” ๋‚ด ๋กœ์ปฌ ์ปค๋ฐ‹๋“ค์„ ์ตœ์‹  ๋ธŒ๋žœ์น˜ ์œ„์—์„œ ํ•˜๋‚˜์”ฉ ๋‹ค์‹œ ์ ์šฉ 
o---o---A (origin/dev ์ตœ์‹  ์ปค๋ฐ‹)
         \
          B'--C' (๋‚ด ๋กœ์ปฌ ์ž‘์—…์ด ์ตœ์‹  ์ปค๋ฐ‹ ์œ„๋กœ ์žฌ์ ์šฉ๋จ)

 

git pull --rebase ์˜ ์žฅ์  : 

  • ๋ถˆํ•„์š”ํ•œ merge commit ๋ฐฉ์ง€
  • ์ด๋ ฅ์ด ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ๋จ (ํ•œ ์ค„๋กœ ์ด์–ด์ง€๋Š” commit log)
  • ํ˜‘์—… ์‹œ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ์ถฉ๋Œ ๋ฐฉ์ง€

 

์ฃผ์˜ ์‚ฌํ•ญ 

  • rebase๋Š” ๋‚ด ๋กœ์ปฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ƒˆ ์ปค๋ฐ‹์ฒ˜๋Ÿผ ๋‹ค์‹œ ์ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ์›๊ฒฉ์— ํ‘ธ์‹œ๋œ ๊ฒƒ์„ ๋ฆฌ๋ฒ ์ด์Šค ํ•˜๋ฉด ์•ˆ๋จ
  • ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์ง์ ‘ ํ•ด๊ฒฐ ํ›„ git rebase --continue ํ•„์š”

 

๋”ฐ๋ผ์„œ 

git pull origin dev --rebase

๋ช…๋ น์–ด๋Š” ๋ถˆํ•„์š”ํ•œ merge commit์„ ํ”ผํ•˜๊ณ  ๊น”๋”ํ•œ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•ด์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ถฉ๋Œ์„ ์ค„์—ฌ์ฃผ๋Š” ๋ช…๋ น์–ด๋กœ 

ํŒ€ ํ”„๋กœ์ ํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๋ฅผ ๊ด€๋ฆฌํ• ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค. 

'๋ฐฑ์—”๋“œ > Git' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Git hub Issue template ๋งŒ๋“ค๊ธฐ  (0) 2025.04.11