๊ฐ๊ฐ ๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ณ๊ฒฝ์ ๋ค์ ๋ค์ master๋ธ๋์น๋ก Merge(๋ณํฉ)๊ฐ ๋์ด์ผ ํ๋ค.
์ด ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ์์ ๋ ์ฌํญ๋ค์ด ์ต์ข ์ฝ๋์ ์ ์ฉ๋ ์ ์๋ค.
Merge ํ๋ ๋ฐฉ๋ฒ
= ๋ธ๋์น ๋ณํฉ
1. merge๋ฅผ ์ํด์๋ ๊ธฐ์ค์ด ๋๋ ๋ธ๋์น๋ก์ด๋ํด์ผ ํ๋ค. [ $ git checkout master ]
2. ํฉ์ณ์ง ๋ธ๋์น๋ฅผ mergeํ๋ค. [ $ git merge ๋ธ๋์น์ด๋ฆ ]
↓
์์ 2๋ฒ๊ณผ์ ์์ merge ํ ๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด Fast-forward ๋ผ๋ ๊ฒ์ด ์๋ค.
์ฌ๊ธฐ์ Fast-forwoard๋, ๋ธ๋์น์ ์์น๋ง ์ต์ ์ปค๋ฐ์ผ๋ก ์ด๋์ํค๋ ๋ฐฉ์์ด๋ค.
๋ฐ๋ผ์ issue๋ฅผ ๋ณํฉ์ํฌ๋ ๋ธ๋์น์ ์์น๊ฐ Commit 4์์ Commit 5๋ก ๋ธ๋์น์ ์์น๋ง ๋ณ๊ฒฝ ๋์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
โป merge ํ ๋ธ๋์น๊ฐ ๋์ด์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋ณด๋ค ํจ๊ณผ์ ์ธ ์ด์์ ์ํด ๋ธ๋์น๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ์ข๋ค.
โซ $ git branch -d ์ญ์ ํ _๋ธ๋์น์ด๋ฆ ๋ช ๋ น์ด๋ก ๋ธ๋์น๋ฅผ ์ญ์ ํ ์ ์๋ค.
โซ $ git branch -v ๋ช ๋ น์ด๋ก ํ์ธํด๋ณด๋ฉด issue ๋ธ๋์น๊ฐ ์ญ์ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์์ ์ค์ตํ ๋ธ๋์น๋ค์ ๊ฐ๋ฐ์ด ์๋ฃ๋์๋ค ๊ฐ์ ํ๊ณ ํ๋์ ๋ธ๋์น๋ก merge ์์ผ๋ณด์.
โซ $ git merge feature-login
โซ $ git log
์ด๋ฒ merge์์๋ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ์ ์์ง๋ง Fast-forward ๋ฐฉ์์ผ๋ก merge๊ฐ ๋์ง ์์๋ค.
์๋ํ๋ฉด master๋ธ๋์น์๋ ๋ ๊ฐ์ Commit(4,5)์ด ์กด์ฌํ๋๋ฐ ์ด๋๋ master๋ธ๋์น๋ฅผ ์ด๋์ํจ๋ค ํด๋ merge๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ Fast-forward ๋ฐฉ์์ผ๋ก๋ merge๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ Fast-forward ๋ฐฉ์์ผ๋ก merge๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ,
Git์์๋ โ merger๋ฅผ ์งํํ master์ feature-login ๋ธ๋์น์ ๊ณตํต ๋ถ๋ชจ ์ปค๋ฐ์ธ Commit 2๋ฅผ ์ฐพ๊ฒ ๋๊ณ , ๋ โก๊ฐ ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ธ Commit 3๊ณผ Commit 5๋ฅผ ํฌํจ ์ด 3๊ฐ์ ์ปค๋ฐ์ผ๋ก merge๋ฅผ ์งํํ๊ฒ ๋๋ค.
์ด๋ ๊ฒ โ , โก์ ์ปค๋ฐ์ ๋ชจ๋ ๊ณ ๋ คํ์ฌ Mergeํ๋ ๋ฐฉ์์ "3-way Merge" ๋ผ๊ณ ํ๋ค.
→ 3-way Merge์ ๊ฒฐ๊ณผ๋ ์๋ก์ด ์ปค๋ฐ์ผ๋ก ์์ฑ๋๋ค.
↓
๊ทธ๋ผ ๋ธ๋์น Merge๋ ๋ ์ฑ๊ณตํ ๊น?
โซ ์๋๋ค. ์์ ๊ฐ์ ์ํฉ์ Commit 3์ 5๊ฐ ์๋ก ๋ค๋ฅธ ํ์ผ์ ๋ํด ์์ ํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋์ด ์ผ์ด๋์ง ์์ ๊ฒ์ด๋ค.
๊ทธ๋ผ feature-login์ Commit 6๋ฅผ ์์ฑํ๊ณ , Commit 5์ ๊ฐ์ด MainService.java ํ์ผ์ ์์ ํ ํ merge๋ฅผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
โซ merge๋ฅผ ์ํด master ๋ธ๋์น๋ก ์ด๋ํ ํ [ $ git checkout master ]
โซ feature-login ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ค. [ $ git merge feature-login ]
๊ทธ ๊ฒฐ๊ณผ,
์ ์ํฉ์์๋ ๋ณ๊ฒฝ์ฌํญ์ ์ถฉ๋(Conflict)์ด ๋ฐ์ํ์๋ค.
Conflict๋, ๋๊ฐ์ ๋ณ๊ฒฝ์ ์ด ํฉ์ณ์ง ๋ ๋ณ๊ฒฝ์ ์์ฒด๊ฐ ์๋ก ์ถฉ๋ํ๋ ์ํ๋ฅผ ์๋ฏธํ๋ค.
ํ์ฌ git์ ์ํ๋ ์๋์ ๊ฐ์๋ฐ,
๋ ๊ฐ์ ๋ณ๊ฒฝ์ ์ด ํฉ์ณ์ง ๋, ์ธ๋ฒ์งธ ๋ผ์ธ์์ conflict๊ฐ ๋ฐ์ํ์๋ค.
๊ทธ๋ผ ์ด๋ฏธ conflict๊ฐ ๋ฐ์ํ ์ํฉ์์ git์ ๋ ์ค์ ์ด๋ค ๋ณ๊ฒฝ์ ์ ์ต์ข ํ์ผ์ ๋ฐ์ํ ์ง ์ค์ค๋ก ํ๋จํ ์ ์์๊น?
โซ ํ๋จํ ์ ์๋ค. ๋๋ฌธ์ Git์ conflict๋ฅผ ๋ฐ์์์ผ์ ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ํด๋น conflict๋ฅผ ์์ ํ๋๋ก ํ๋ค.
Conflict๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
1. ์ง์ merge ํ๊ธฐ
2. mergetool์ ์ด์ฉํด์ merge ํ๊ธฐ
์ฌ๊ธฐ์ ๋๋ฒ์งธ mergetool์ ์ฌ์ฉํ์ฌ ์ถฉ๋์ ํด๊ฒฐํด ๋ณด๋ คํ๋ค.
โซ $ git mergetool
์ด๋ 3-way Merge ๋ฐฉ์์ผ๋ก ๋ณํฉ๋์๊ธฐ ๋๋ฌธ์ ์ด ์ธ ๊ฐ์ ์ฐฝ์ด ๋จ๊ฒ ๋๋ ๊ฒ์ธ๋ฐ, ์ฌ๊ธฐ์
์ฒซ๋ฒ์งธ ์ฐฝ์ master๋ธ๋์น์์์ ๋ณ๊ฒฝ์ ์,
๋๋ฒ์งธ๋ master์ feature-login์ ๊ณตํต ๋ถ๋ชจ๊ฐ ๋๋ ๋ถ๋ถ์,
์ธ๋ฒ์งธ๋ feature-login๋ธ๋์น์์์ ๋ณ๊ฒฝ์ ,
๋ง์ง๋ง ํ๋จ์ ์๋ ์ฐฝ์ ์ค์ working-directory์ ์๋ MainService.java์ ์ํ๋ฅผ ๋ณด์ฌ์ค๋ค.
์ด๋ ๊ฒ mergtool์ ์ด์ฉํ๋ฉด ์ธ๊ฐ์ง view๋ฅผ ๋์์ ๋น๊ตํ๋ฉด์ ๋ณด๋ค ํธํ๊ฒ merge๋ฅผ ์งํํ ์ ์๋ค.
์ฌ๊ธฐ์ Tip์ ํ๊ฐ์ง ๋งํ์๋ฉด
์ฝ๋ ํ ์ค ์ ์ฒด๋ฅผ ์ง์ฐ๋ ๋ช ๋ น์ด๋ ์ง์ฐ๊ณ ์ถ์ ์ฝ๋ ์์ ์ปค์๋ฅผ ์ฌ๋ฆฌ๊ณ 'dd' ๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ ํด์ฃผ๊ณ 'Esc → :wq'๋ก ์ ์ฅ ํ ์ข ๋ฃํ ๋ค์, ๋๋จธ์ง ์ฐฝ๋ค๋ ์ ๋ถ 'Esc → :q'๋ก ์ข ๋ฃํ๋ค.
์ดํ MainService.java๋ฅผ ๋ค์ด๊ฐ ๋ณด๋ฉด ์ฝ๋๊ฐ ์ ๋๋ก ์์ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฝ๋ํ๋ ์ Java ์น ๊ฐ๋ฐ ์ฒดํ๋จ ํ๋ ์ค '์ค๋ฌด์๊ฐ ์๋ ค์ฃผ๋ Git ํ์ฉํ ํ๋ก์ ํธ ๊ด๋ฆฌ' ์ด๋ฌ๋ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ฑํ์์ต๋๋ค :)
์ฝ๋ํ๋ ์ URL: https://www.codepresso.kr/
'๐ ๊ธฐํ > ์ฝ๋ํ๋ ์ ์ฒดํ๋จ_BE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Git] GitFlow | ๋ธ๋์น ํ์ฉ ์ ๋ต (0) | 2022.01.17 |
---|---|
[Git] Tag์ ์ข ๋ฅ ๋ฐ Tag ์์ฑํ๊ธฐ (0) | 2022.01.17 |
[Git] Branch์ ์ดํด | Branch ์์ฑ ๋ฐ ์ด๋ | ์ค์ต (2) | 2022.01.15 |
[Java] ๋ฐ๋ณต๋ฌธ | for | while | ๋ฐ๋ณต๋ฌธ ์ ์ด (0) | 2022.01.12 |
[Java] ๋ฐฐ์ด(Array) (0) | 2022.01.12 |