๐Ÿ†™ level up

[Git ์‹ฌํ™”] Git Branch ์ œ๋Œ€๋กœ ์•Œ๊ธฐ / Branch๋ž€? / Merge ํ•ด๋ณด๊ธฐ / Conflict ํ•ด๊ฒฐํ•˜๊ธฐ

๊ธฐ๋ฎจ์ง€ 2022. 8. 24. 15:31


 

 

Branch๋ž€?

ํŠน์ • ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” 'ํฌ์ธํ„ฐ'

๋ธŒ๋žœ์น˜๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ํ๋ฆ„์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•จ.

 

์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ๊นƒ์œผ๋กœ ๋ฒ„์ „๊ด€๋ฆฌ ํ•˜๋ฉด ์ดˆ๊ธฐ์— ์ž๋™ ์…‹ํŒ…๋˜๋Š” ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜ = master ๋ธŒ๋žœ์น˜

๊ทธ๋ฆฌ๊ณ  ํ—ค๋“œ๋Š” ๋ณดํ†ต ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ํŠน์ • ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋จ.

๋ณดํ†ต master ๋ธŒ๋žœ์น˜์—๋Š” ์‹ค์ œ ์„œ๋น„์Šค์— ๋ฐฐํฌํ•  ์ •๋„๋กœ ์™„์„ฑ๋œ ์ปค๋ฐ‹๋“ค๋งŒ ๋‘๊ณ ,

์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๋งŒ๋“ค์–ด์ง„ ์ปค๋ฐ‹๋“ค์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Œ.

 

 

Branch ์ƒ์„ฑํ•˜๊ธฐ

'git branch ๋ธŒ๋žœ์น˜ ์ด๋ฆ„'์„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ์™„๋ฃŒ

- ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋ฉด ํ—ค๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ ์ปค๋ฐ‹์„ ๊ทธ๋Œ€๋กœ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋จ

$ git branch {branch_name}

 

 

Head๋ฅผ ๋‹ค๋ฅธ Branch๋กœ ์˜ฎ๊ธฐ๊ธฐ

'git checkout ํ—ค๋“œ๋กœ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์‹ถ์€ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„'์„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ํ—ค๋“œ ์˜ฎ๊ธฐ๊ธฐ ์™„๋ฃŒ

- ๋ณดํ†ต head๊ฐ€ master ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,

  head๋ฅผ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ์˜ฎ๊ฒจ์ค˜์•ผ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ์ปค๋ฐ‹์„ ๊ทธ ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋จ

$ git checkout {branch_name}

 

 

๋ณด์ด์ง€ ์•Š๋Š” Branch๊นŒ์ง€ ๋ชจ๋‘ ํ™•์ธํ•˜๊ธฐ

--all : Head๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ธŒ๋žœ์น˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ชจ๋“  Branch๋ฅผ ๋ณด๊ฒ ๋‹ค

--branch : Branch์™€ Commit์˜ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ž˜ํ”„ ํ˜•์‹์œผ๋กœ๋„ ๋ณด๊ฒ ๋‹ค

$ git log --all --graph

 

 

Merge ํ•ด๋ณด๊ธฐ

์˜ˆ์‹œ >>

์•ž์„œ ๋งŒ๋“  ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ develop์ด๋ผ๊ณ  ํ•˜๊ณ , develop์—์„œ ๋˜ ์ƒˆ๋กœ์šด ์ž‘์—… ํ๋ฆ„์„ ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ž„.

๊ฐœ๋ฐœ ํŒ€์€ ๋ ˆ์ด์‹ฑ ๊ฒŒ์ž„ ์ค‘ Basic Car ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์„ ๋‘ ๊ฐœ์˜ ํŒ€ A, B๋กœ ๋‚˜๋ˆ ์„œ ์ง„ํ–‰ํ•จ.

๋ ˆ์ด์‹ฑ ๊ฒŒ์ž„์—์„œ๋Š” ์ฐจ๋Ÿ‰์ด ์ฑ ๋Ÿ‰์„ ๊ณต๊ฒฉํ•  ์ˆ˜๋„, ๋ฐฉ์–ดํ•  ์ˆ˜๋„ ์žˆ์Œ.

 

์ด๋•Œ ๊ณต๊ฒฉ์„ ๋‹ด๋‹นํ•˜๋Š” Attack Method์™€,

๋ฐฉ์–ด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” Defend Method๋ฅผ ๊ฐ๊ฐ ๋ณ„๊ฐœ์˜ ์ž‘์—…์œผ๋กœ ์ง„ํ–‰ํ•จ.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์ž‘์—…์— ๋ณ„๋„์˜ ๋ธŒ๋žœ์น˜(feature-attack, feature-defend)๋ฅผ ํ• ๋‹นํ•˜๋ฉด ๋จ.

 

์ด๋ ‡๊ฒŒ ๋ณ„๋„์˜ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ๋“ค์„ ํ•ฉ์น˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์ž‘์—…์ด Merge์ž„.

Merge๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  ์ƒ์œ„ ๋ธŒ๋žœ์น˜์ธ develop์œผ๋กœ ํ—ค๋“œ๋ฅผ ์ด๋™์‹œ์ผœ์•ผ ํ•จ.

 

'git merge ํ•ฉ์น˜๊ณ  ์‹ถ์€ ๋ธŒ๋žœ์น˜๋ช…'์„ ํ†ตํ•ด merge

- ํ˜„์žฌ Head๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ธŒ๋žœ์น˜์— branch_name์—์„œ ํ–ˆ๋˜ ์ž‘์—…์„ ํ•ฉ์น˜๋ผ๋Š” ์˜๋ฏธ

$ git merge {branch_name}

 

 

Conflict ํ•ด๊ฒฐํ•˜๊ธฐ

develop ๋ธŒ๋žœ์น˜์—์„œ feature-attack, feature-defend ๋ธŒ๋žœ์น˜๋กœ ๊ฐˆ๋ผ์ง€๊ธฐ ์ „์˜ ์ƒํ™ฉ

 

์ด ์ƒํƒœ์—์„œ BasicCar ํด๋ž˜์Šค์˜ ๋ ๋ถ€๋ถ„์— ์„œ๋กœ ๋‹ค๋ฅธ method๋ฅผ ์ถ”๊ฐ€ํ•จ.

์ฆ‰, ๊ฐ™์€ ๋ผ์ธ์ธ๋ฐ ์„œ๋กœ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์“ด ๊ฒƒ์ž„.

 

develop์—์„œ feature-attack ๋ธŒ๋žœ์น˜์™€ ์ฒซ๋ฒˆ์งธ merge๋ฅผ ํ•œ ๋’ค์˜ ์ƒํƒœ

์—ฌ๊ธฐ์—์„œ ๋˜ ๋‹ค์‹œ feature-defend๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‚ด์šฉ์„ mergeํ•˜๋ ค๊ณ  ํ•จ.

์ด๋•Œ Git์—์„œ ์ถฉ๋Œ(conflict) ๋ฐœ์ƒ

 

-> ํ˜„์žฌ ์ƒํƒœ์—์„œ feature-defend์™€ merge๋ฅผ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ฐ™์€ ๋ผ์ธ์— ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์ ํ˜€์žˆ์œผ๋‹ˆ,

attack ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”์ง€, defend ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ชจ๋ฆ„

 

 

 

์œ„์˜ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”?

 

1. BasicCar.js ํŒŒ์ผ์—์„œ ์ถฉ๋Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ์‹œ๋“ค์„ ๋ชจ๋‘ ์ง€์šฐ๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ชจ์Šต์œผ๋กœ ๊ณ ์ณ์คŒ

2. ์•„๋ž˜ ๋ช…๋ น์–ด ์ž…๋ ฅ

$ git add .
$ git commit -m "{commit_message}"

 

 

Merge ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ

Fast-Forward Merge : ๊ธฐ์กด ๋ธŒ๋žœ์น˜๊ฐ€ merge ๋‹นํ•˜๋Š” ๋ธŒ๋žœ์น˜๊นŒ์ง€ ์ญ‰ ๋‹น๊ฒจ์ ธ ์˜ค๋Š” ๊ฒฝ์šฐ

์ง์„  ๋ชจ์–‘์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ์—์„œ ์•ž๋’ค๋กœ ์žˆ๋Š” ๋ธŒ๋žœ์น˜์ธ ๊ฒฝ์šฐ์—๋Š”

์ด์ „ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ธฐ์ค€ ๋ธŒ๋žœ์น˜์—์„œ merge๋ฅผ ์‹œ๋„ํ•˜๋ฉด

๋ณด๋‹ค ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํƒ€๊ฒŸ ๋ธŒ๋žœ์น˜๋กœ์˜ ์œ„์น˜๋กœ

๊ธฐ์กด ๋ธŒ๋žœ์น˜๊ฐ€ ์ด๋™๋งŒ ํ•˜๋Š” Fast-Forward Merge๊ฐ€ ๋ฐœ์ƒํ•จ.

 

์•„์˜ˆ ์ƒˆ๋กœ์šด commit์ด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒฝ์šฐ

ํ๋ฆ„์ด ์ค‘๊ฐ„์— ๊ฐˆ๋ผ์ง„ ๊ฒฝ์šฐ(๋ณ‘๋ ฌ),

๊ฐ ํ๋ฆ„์˜ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ธŒ๋žœ์น˜๋“ค์„ mergeํ•˜๋ฉด

์œ„ conflict ํ•ด๊ฒฐ์˜ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด merge commit์ด ๋ฐœ์ƒํ•จ.

 

 

๋‚ด ์ปดํ“จํ„ฐ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๊นƒํ—ˆ๋ธŒ/๊นƒ๋žฉ์— ์ฒ˜์Œ ์˜ฌ๋ฆด ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ ๋ช…๋ น์–ด์˜ ์˜๋ฏธ

git push origin master๋Š” master ๋ธŒ๋žœ์น˜๋ฅผ  origin์ด ์˜๋ฏธํ•˜๋Š” ๊นƒ๋žฉ ์„œ๋ฒ„์˜ ํ”„๋กœ์ ๋กœ ์˜ฌ๋ ค๋‹ฌ๋ผ๋Š” ๋ช…๋ น

-u : --set-upstream์˜ ์ค„์ž„๋ง๋กœ, ํ˜„์žฌ ๋‚ด ์ปดํ“จํ„ฐ์˜ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๊ฐ€

ํ•ญ์ƒ ๊นƒ๋žฉ ์„œ๋ฒ„์— ์˜ฌ๋ฆฐ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฐ”๋ผ๋ณด๋„๋ก ํ•˜๋ผ๋Š” ๋ช…๋ น

 

-u ์˜ต์…˜์„ ์ฃผ๊ณ  ๋งจ ์ฒ˜์Œ์— push๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด, ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” git push/pull๋งŒ ํ•˜๋”๋ผ๋„

git์ด ์•Œ์•„์„œ ๋‚ด ์ปดํ“จํ„ฐ์˜ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋ฅผ ๊นƒ๋žฉ ์„œ๋ฒ„์— ์žˆ๋Š” ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋จ.

$ git push -u origin master

 

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•ž์„œ ๋งŒ๋“ค์—ˆ๋˜ develop ๋ธŒ๋žœ์น˜๋ฅผ ์™ธ๋ถ€ ์ €์žฅ์†Œ์— ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Œ.

(ํ˜„์žฌ develop ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ตœ์‹  ์ปค๋ฐ‹๊ณผ ๊ทธ ์ด์ „์˜ ์‹ ๊ทœ ์ปค๋ฐ‹๋“ค์ด ๋ชจ๋‘ ๊นƒ๋žฉ ์„œ๋ฒ„์— ์—…๋กœ๋“œ ๋จ)

$ git push -u origin develop