๋Œ€์™ธํ™œ๋™/CodePresso

์ฝ”๋“œํ”„๋ ˆ์†Œ ์ฒดํ—˜๋‹จ 3 : ์‹ค๋ฌด์ž๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” Git ํ™œ์šฉํ•œ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ

kite707 2022. 1. 15.

https://sectumsempra.tistory.com/109

 

์ฝ”๋“œํ”„๋ ˆ์†Œ ์ฒดํ—˜๋‹จ : 1. ์‹ค๋ฌด์ž๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” Git ์ž…๋ฌธ

์ œ๊ณต๋ฐ›์€ ๊ฐ•์˜๋ฅผ ๋ชจ๋‘ ์ˆ˜๊ฐ•ํ•ด์„œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์šฐ์„  Git bashํ”„๋กœ๊ทธ๋žจ์„ ๊น”๊ณ , github์— ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ƒ๋žตํ•˜๊ฒ ๋‹ค.(๊ฐ•์˜์—์„œ๋Š” ์•Œ๋ ค

sectumsempra.tistory.com

์œ„์—์„œ ์ž‘์„ฑํ•œ ๊ธ€ ๋‹ค์Œ ๋‹จ๊ณ„์˜ ๊ฐ•์˜์ด๋‹ค. ์ด ๊ฐ•์˜์—์„œ๋Š” ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ๋ณ‘ํ•ฉ์— ๋Œ€ํ•ด ์ค‘์ ์ ์œผ๋กœ ๋‹ค๋ฃฌ๋‹ค.

 

Git ๋ธŒ๋žœ์น˜์˜ ์ดํ•ด

๐Ÿ’ก branch๋ž€?

๐Ÿ’กbranch๋ž€?
๋ณธ๋ž˜์˜ ์†Œ์Šค์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒํ•œ ๋…๋ฆฝ์ ์ธ ์ž‘์—…๊ณต๊ฐ„์œผ๋กœ, ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ผ์ข…์˜ ํฌ์ธํ„ฐ์ด๋‹ค.

๐Ÿ’กhead๋ž€?
ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ผ์ข…์˜ ํฌ์ธํ„ฐ์ด๋‹ค.

master๋ผ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ head๊ฐ€ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์œ„ ์ƒํƒœ์—์„œ ๋‘๋ฒˆ์งธ ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค.

๋˜ ์—ฌ๊ธฐ์„œ feature-login์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

git branch feature-login

feature-login ๋ธŒ๋žœ์น˜๋กœ checkoutํ•œ ๋ชจ์Šต, git branch๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์ดˆ๋ก์ƒ‰์œผ๋กœ ๋‚˜์˜ค๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์ด๋‹ค.

์ด์ œ feature-login๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ปค๋ฐ‹์„ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค.

head๊ฐ€ feature-login์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , ์ปค๋ฐ‹์ด ๋ฐ˜์˜๋˜์—ˆ๋‹ค.

master๋ธŒ๋žœ์น˜๋กœ ์ฒดํฌ์•„์›ƒ ํ›„ git log๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค.

๋‹ค์‹œ head๊ฐ€ master๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์‹ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. Head๋Š” checkout ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•œ๋‹ค.
2. ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ์ƒํƒœ๋Š” HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์ด ์ตœ์‹ ์ด ๋˜๊ณ  ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ์ƒํƒœ๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

Merge ์‹ค์Šต

์‹ค์Šต์„ ์œ„ํ•ด master ๋ธŒ๋žœ์น˜์— “commit 4”๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ํ˜„์žฌ master branch์˜ log๋ฅผ ์ฐ์–ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ด์ œ git checkout -b issue๋ฅผ ์ž…๋ ฅํ•ด issue๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  “Commit 5๋ฅผ ๋งŒ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค.

// issue๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  issue ๋ธŒ๋žœ์น˜๋กœ checkout
git checkout -b issue

์ด์ œ issue ๋ธŒ๋žœ์น˜๋ฅผ master๋กœ ๋ณ‘ํ•ฉ์‹œํ‚ฌ ๊ฒƒ์ด๋‹ค. ์šฐ์„  master ๋ธŒ๋žœ์น˜๋กœ checkout ํ•˜๊ณ , git merge issue๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ๋ฐ˜๋“œ์‹œ ๊ธฐ์ค€์ด ๋˜๋Š” ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•ด์„œ ๋ณ‘ํ•ฉํ•ด์•ผํ•œ๋‹ค.

git checkout master
git merge issue

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ๋’ค log๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ด์™€ ๊ฐ™์ด ๋ธŒ๋žœ์น˜์˜ ์œ„์น˜๋งŒ ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹์„ Fast-forward Merge๋ผ๊ณ  ํ•œ๋‹ค. ์ด์ œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” issue๋ธŒ๋žœ์น˜๋ฅผ ์ง€์šฐ๋„๋ก ํ•˜์ž

//issue ๋ธŒ๋žœ์น˜ ์‚ญ์ œ
git branch -d issue

 

Fast-forward Merge vs 3-way Merge

์ด๋ฒˆ์—๋Š” 3-way Merge์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. ๋‘ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๐Ÿ’ก Fast-forward Merge
→๋ธŒ๋žœ์น˜์˜ ์œ„์น˜๋งŒ ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹

๐Ÿ’ก3-way Merge
→3๊ฐ€์ง€ ์ปค๋ฐ‹์„ ๋ชจ๋‘ ๊ณ ๋ คํ•˜์—ฌ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹.

1.master์™€ feature-login๋ธŒ๋žœ์น˜์˜ ๊ณตํ†ต ๋ถ€๋ชจ ์ปค๋ฐ‹
2.master๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹
3.feature-login ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹

๋นจ๊ฐ„ ๋„ค๋ชจ๊ฐ€ ์ณ์ง„ 3๊ฐœ์˜ ์ปค๋ฐ‹์„ ๊ณ ๋ คํ•˜์—ฌ
์ด ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

์šฐ์„  ์•„๋ž˜ ์ฝ”๋“œ๋“ค์„ ์ž…๋ ฅํ•ด feature-login์— commit 6์„ ๋งŒ๋“ค๊ณ  master๋ธŒ๋žœ์น˜์—์„œ ๋ณ‘ํ•ฉ์„ ์‹œ๋„ํ•ด๋ณด์ž.

git checkout feature-login
vi MainService.java
git add MainService.java
git commit -m "Commit 6 on feature-login branch"

git checkout master
git merge feature-login

๊ทธ๋Ÿฌ๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ถฉ๋Œ์˜ ์ด์œ ๋Š” git status ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

MainService.java์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

์ถฉ๋Œ์˜ ํ•ด๊ฒฐ

์ถฉ๋Œ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. ์ง์ ‘ Mergeํ•˜๊ธฐ
  2. Mergetool ์‚ฌ์šฉํ•˜๊ธฐ

1. ์ง์ ‘ Mergeํ•˜๊ธฐ

์šฐ์„  vi MainService.java๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์–ด๋””๊ฐ€ ์ถฉ๋Œํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

<<<<,====,>>>>๋“ฑ ์œ ์ €๊ฐ€ ์ž‘์„ฑํ•˜์ง€ ์•Š์€ ๊ธฐํ˜ธ๋“ค์ด ๋“ค์–ด๊ฐ€์žˆ๋‹ค. ์ด๊ฒƒ์€ ์–ด๋””์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ธฐํ˜ธ์ด๋‹ค. ์ด๋ฅผ ๋ณด๊ณ  ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„์„ ๋™์ผํ•˜๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋‹ค์‹œ merge๋ฅผ ์‹œ๋„ํ•˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

2. mergetool ์‚ฌ์šฉํ•˜๊ธฐ

git mergetool์ด๋ผ๊ณ  ์ž…๋ ฅํ•˜๊ณ  vimdiff๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐฝ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ ๋งจ ๋ฐ‘์— ์ฐฝ์—์„œ ์‚ญ์ œ๋ฅผ ์›ํ•˜๋Š” ์ค„์— ์ปค์„œ๋ฅผ ๋‘๊ณ  d๋ฅผ 2๋ฒˆ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๋ผ์ธ์„ ์ง€์šธ ์ˆ˜ ์žˆ๋‹ค. <<<,===,>>>๋“ฑ์ด ์žˆ๋Š” ๋ผ์ธ์„ ๋ชจ๋‘ ์‚ญ์ œํ•˜์ž. ์ปค์„œ๋Š” ๋ฐฉํ–ฅํ‚ค๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ง€์šด ํ›„์—๋Š” esc, :wq๋ฅผ ์ž…๋ ฅํ•ด ์ €์žฅํ•˜๊ณ  ์ข…๋ฃŒํ•˜์ž. ๋‚˜๋จธ์ง€ 3๊ฐœ์˜ ์ฐฝ์€ ์ €์žฅ ์—†์ด ์ข…๋ฃŒํ•  ๊ฒƒ์ด๋‹ˆ :q๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์ž.

์ด์ œ MainService.javaํŒŒ์ผ์„ ์—ด์–ด ๋ณ‘ํ•ฉ์ด ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

๋ณ‘ํ•ฉ์ด ์ž˜ ๋˜์—ˆ๋‹ค

๋ณ‘ํ•ฉ์ด ์ž˜ ๋˜์—ˆ์Œ์„ ํ™•์ธํ–ˆ์œผ๋‹ˆ ์ปค๋ฐ‹์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋ณ‘ํ•ฉ ๋์ด๋‹ค.

 

๐Ÿ“Œ์ฝ”๋“œํ”„๋ ˆ์†Œ Java ์›น ๊ฐœ๋ฐœ ์ฒดํ—˜๋‹จ ํ™œ๋™์œผ๋กœ ์ œ๊ณต๋ฐ›์€ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ์ฝ”๋“œํ”„๋ ˆ์†Œ์—์„œ "์‹ค๋ฌด์ž๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” Git ํ™œ์šฉํ•œ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ" ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ์ฝ”๋“œํ”„๋ ˆ์†Œ ๋ฐ”๋กœ๊ฐ€๊ธฐ ๋งํฌ : https://www.codepresso.kr/ 

๋Œ“๊ธ€