[Git] 4. branch & merge
๐ branch ๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ ๋ฒ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด
- ์ค๋ฐฐํฌ์ฉ, ํ ์คํธ์ฉ, ๊ธฐ๋ฅ์ถ๊ฐ ๋ฑ
- ์ฌ๋ฌ ์์
๋ค์ด ๊ฐ๊ฐ ๋
๋ฆฝ๋์ด ์งํ๋ ๋
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ, ๊ฒ์ํ ๊ธฐ๋ฅ, ์ฝ๋ ์์ โฆ
- ๊ฐ๊ฐ์
branch์์ ์์ ํ ๋ค ํ์ ๋ ๊ฒ์main branch์merge
๐ branch ์์ฑํ๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ํ์ฌ ๋ก์ปฌ์ ์๋ ๋ธ๋์น ๋ชฉ๋ก์ ๋ณด์ฌ์ค๋ค
git branch
# ์๊ฒฉ ๋ธ๋์น ๋ชฉ๋ก์ ๋ณด์ฌ์ค๋ค
git branch -r
# feat/login ๋ธ๋์น ์์ฑ
git branch feat/login
# feat/login ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ํด๋น ๋ธ๋์น๋ก ์ด๋
git switch -c feat/login # ์ ๊ท
git checkout -b feat/login # ๊ธฐ์กด (checkout ๋ช
๋ น์ด๊ฐ switch, restore๋ก ๋ถ๋ฆฌ)
# ๋ธ๋์น ์ญ์
git branch -d (์ญ์ ํ ๋ธ๋์น๋ช
)
# ์๊ฒฉ ๋ธ๋์น ์ญ์
git push origin --delete (์ญ์ ํ ๋ธ๋์น๋ช
)
# ๋ธ๋์น๋ช
๋ณ๊ฒฝ
git branch -m (๊ธฐ์กด ๋ธ๋์น๋ช
) (์ ๋ธ๋์น๋ช
)
# ๊ฐ์ ์ญ์
git branch -D (์ญ์ ํ ๋ธ๋์น๋ช
)
๐ branch ์ค๋ฌด ํ์ฉ
1๏ธโฃ ๊ธฐ๋ฅ/๋ฒ๊ทธ/์์ ๋จ์๋ณ ๋ธ๋์น
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํ์ฉ ๋ฐฉ์์ผ๋ก, ์์ ๋จ์๋ฅผ ๋ถ๋ฆฌํด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ
- ์
feature/user-profile: ์ ํ๋กํ ๊ธฐ๋ฅfix/login-error: ๋ก๊ทธ์ธ ์๋ฌ ์์ chore/update-dependencies: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ
- ์์ ์ ๋ณ๋ ฌ๋ก ์งํ, ์ฝ๋ ์ถฉ๋ ์ต์ํ
2๏ธโฃ PR(Pull Request) ๋จ์๋ก ๋ธ๋์น ํ์ฉ
- ๋ธ๋์น๋ง๋ค ์์ ์ด ์๋ฃ๋๋ฉด PR์ ์์ฑํ์ฌ ์ฝ๋๋ฆฌ๋ทฐ ์งํ
- PR์ ํตํด ์ฝ๋ ํ์ง์ ํ์ธํ๊ณ , ์น์ธ ํ main์ merge
- merge๋๋ฉด ์์ ๋ธ๋์น๋ ์ญ์ (ํ์คํ ๋ฆฌ ์ ๋ฆฌ๋ฅผ ์ํจ)
3๏ธโฃ ๋ธ๋์น๋ฅผ ํ๊ฒฝ๋ณ๋ก ๋๋ ์ ์์
- ๊ท๋ชจ ์๋ ์๋น์ค์์๋ ๋ฐฐํฌ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ธ๋์น๋ฅผ ๊ตฌ๋ถํด ์์ ์ฑ์ ํ๋ณด
- ์
main: ์ด์ ํ๊ฒฝ(Production)์ฉ, ๋ฐฐํฌ ๊ธฐ์ค ๋ธ๋์นdevelop: ๊ฐ๋ฐ ํ๊ฒฝ์ฉ, ๊ธฐ๋ฅ ๋ธ๋์น๋ค์ ๋จธ์งํด ํตํฉ ํ ์คํธrelease/v1.2.0: ํน์ ๋ฒ์ ์ค๋น๋ฅผ ์ํ ๋ฐฐํฌ ํ๋ณด ๋ธ๋์น
- ํ๋ง๋ค Git flow, Github flow, trunk-based development ๋ฑ ๋ค์ํ ์ ๋ต์ ํํ๋ค.
4๏ธโฃ ๊ธด๊ธ ์์ ์ฉ ํซํฝ์ค ๋ธ๋์น
- ์ด์ ์ค ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ฉด main ๋ธ๋์น์์ ๋ฐ๋ก
hotfix/issue-name์ ๋ฐ์ ์์ ํ main์ merge (๋น ๋ฅธ ๋์) - ์
1
git switch -c hotfix/payment-timeout main
5๏ธโฃ ํ๊ทธ์ ํจ๊ป ๋ฆด๋ฆฌ์ฆ ๊ด๋ฆฌ
- ๋ฐฐํฌ ์ค๋น๊ฐ ๋๋ ๋ธ๋์น(๋ณดํต main์ด๋ release ๋ธ๋์น)์์ ํ๊ทธ๋ฅผ ์ฐ์ด ํด๋น ์์ ์ ์ฝ๋๋ฅผ ๋ฐฐํฌ ๋ฐ ์ถ์
- ์
1 2
git tag v1.2.0 git push origin v1.2.0
ํ์ฌ๋ณ Git ์ ๋ต
- ์์ ์คํํธ์ ์ GitHub flow(๊ธฐ๋ฅ ๋ธ๋์น โ main์ PR ํ ๋จธ์ง)๋ก ๋จ์ํ๊ฒ ๊ด๋ฆฌ
- ๋๊ท๋ชจ ์๋น์ค๋ Git flow(๋ฉ์ธ/๊ฐ๋ฐ/๋ฆด๋ฆฌ์ฆ/ํซํฝ์ค ๋ธ๋์น ์ฒด๊ณ)๋ฅผ ์จ์ ๋ค์ํ ์ํฉ์ ์ ์ฐํ๊ฒ ๋์ฒ
๐ merge
- Git ์์ ๋ ๊ฐ ์ด์์ ๋ธ๋์น๋ฅผ ํ๋๋ก ํฉ์น๋(๋ณํฉํ๋) ๊ณผ์
- ๊ฐ๋ฐ์๋ค์ ๋ ๋ฆฝ์ ์ธ ์์ ๊ณต๊ฐ(๋ธ๋์น)์์ ๊ฐ๋ฐ์ ์งํํ๊ณ , ๋์ค์ ์ด ๋ณ๊ฒฝ ์ฌํญ๋ค์ ํตํฉํ์ฌ ๊ด๋ฆฌ
๐ merge ์ ํ์์ฑ
- ๋์ ๋ค๋ฐ์ ๊ฐ๋ฐ
- ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ๋์์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ด๋ ๋ฒ๊ทธ ์์ ์ ์์
- ์์ ์ ์ธ ์ฝ๋ ๊ด๋ฆฌ
- ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋์ ๋ฉ์ธ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์ง
- ์์ ๋ถ๋ฆฌ
- ํน์ ๊ธฐ๋ฅ์ด๋ ์คํ์ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ๊ฐ๋ฐํ๊ณ , ์์ฑ๋๋ฉด ๋ฉ์ธ ๋ธ๋์น์ ํตํฉ
๐ merge ์ ์๋ ๋ฐฉ์
1) Fast-forward merge
- ์กฐ๊ฑด: ๋์์ด ๋๋ ๋ธ๋์น(์:
main)์ ์๋ก์ด ์ปค๋ฐ์ด ์๊ณ , ํฉ์น๋ ค๋ ๋ธ๋์น(์:feature)๋ง ์๋ก์ด ์ปค๋ฐ์ ๊ฐ์ง๊ณ ์์ ๋ ๋ฐ์ - ์๋ ๋ฐฉ์: ๋์ ๋ธ๋์น์
HEAD๋ฅผ ํฉ์น๋ ค๋ ๋ธ๋์น์HEAD๋ก ์ด๋ - ์ฅ์ : ํ์คํ ๋ฆฌ๊ฐ ๊น๋ํ๊ฒ ์ ์ง๋๊ณ , ๋ถํ์ํ ์ปค๋ฐ์ด ์๊ธฐ์ง ์๋๋ค.
- ๋จ์ :
feature๋ธ๋์น๊ฐ ์ธ์ main๋ธ๋์น์ ๋ณํฉ๋์๋์ง ๊ธฐ๋ก์ด ๋จ์ง ์์ ์ถํ ํ์คํ ๋ฆฌ ํ์ ์ด ์ด๋ ค์ธ ์ ์๋ค. (์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํดgit merge --no-ff์ต์ ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ก ๋ณํฉ ์ปค๋ฐ์ ์์ฑํ ์ ์๋ค)
2) Three-way merge
- ์กฐ๊ฑด: ๋์ ๋ธ๋์น(
main)์ ํฉ์น๋ ค๋ ๋ธ๋์น(feature) ๋ชจ๋์์ ์๋ก์ด ์ปค๋ฐ์ด ๋ฐ์ํ์ฌ, ๋ ๋ธ๋์น์ ๊ณตํต ์กฐ์ ์ปค๋ฐ(base commit) ์ดํ๋ก ๊ฐ๊ฐ์ ๋ณ๊ฒฝ ์ด๋ ฅ์ด ์์ ๋ ๋ฐ์ - ์๋ ๋ฐฉ์: ์๋ 3๊ฐ์ง ์ปค๋ฐ์ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ํฉ์น๋ค. ์ถฉ๋์ด ์๋ค๋ฉด Git์ด ์๋์ผ๋ก ๋ณํฉ ์ปค๋ฐ์ ์์ฑํ๊ณ ๋ณํฉ์ ์๋ฃํ๋ค.
main๋ธ๋์น์ ์ต์ ์ปค๋ฐfeature๋ธ๋์น์ ์ต์ ์ปค๋ฐ- ๋ ๋ธ๋์น์ ๊ฐ์ฅ ์ต๊ทผ ๊ณตํต ์กฐ์ ์ปค๋ฐ (base commit)
- ์ฅ์ : ๋ณํฉ ์ปค๋ฐ์ด ์์ฑ๋์ด ๋ช ํํ ๊ธฐ๋ก์ด ๋จ๊ธฐ ๋๋ฌธ์ ํ์คํ ๋ฆฌ ๋ณด์กด์ ์ฉ์ดํจ
- ๋จ์ : ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์๋์ผ๋ก ํด๊ฒฐํด์ผ ํจ
๐ merge ์ฌ์ฉ๋ฒ
1
2
3
4
5
# 1. ๋ณํฉํ๋ ค๋ ๋์ ๋ธ๋์น๋ก ์ด๋ํฉ๋๋ค. (์: main ๋ธ๋์น์ feature ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ ค๋ ๊ฒฝ์ฐ)
git switch main
# 2. ๋ค๋ฅธ ๋ธ๋์น(feature)๋ฅผ ํ์ฌ ๋ธ๋์น(main)์ ๋ณํฉํฉ๋๋ค.
git merge feature
๐ ๋ณํฉ ์ถฉ๋ (Merge Conflicts) ํด๊ฒฐ
- ์ถฉ๋ ํ์ธ
git merge๋ช ๋ น ์คํ ํ โCONFLICTโ ๋ฉ์ธ์ง๊ฐ ๋จ๊ณ ,git status๋ช ๋ น์ ํตํด ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์ ํ์ธํ ์ ์๋ค.
- ํ์ผ ์์
- ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์ ํ
์คํธ ํธ์ง๊ธฐ๋ก ์ด๋ฉด Git์ด ์ถฉ๋ ๋ถ๋ถ์ ํน์ ๋ง์ปค(
<<<<<<<,=======,>>>>>>>)๋ก ํ์ํด์ค๋ค. ์ด ๋ง์ปค๋ฅผ ๋ณด๊ณ ์ํ๋ ๋ด์ฉ์ ์ ํํ๊ฑฐ๋ ์กฐํฉํ์ฌ ์๋์ผ๋ก ์์ ํ๋ค.1 2 3 4 5
<<<<<<< HEAD ํ์ฌ ๋ธ๋์น์ ๋ด์ฉ ======= ๋ณํฉํ๋ ค๋ ๋ธ๋์น์ ๋ด์ฉ >>>>>>> feature
- ์์ ๋ ํ์ผ ์คํ ์ด์ง
- ์ถฉ๋์ ํด๊ฒฐํ ํ, ์์ ๋ ํ์ผ์
git add <ํ์ผ ์ด๋ฆ>๋ช ๋ น์ผ๋ก ์คํ ์ด์ง ์์ญ์ ์ถ๊ฐํ๋ค.
- ๋ณํฉ ์ปค๋ฐ ์์ฑ
- ๋ชจ๋ ์ถฉ๋์ด ํด๊ฒฐ๋๊ณ ํ์ผ์ด ์คํ
์ด์ง ๋๋ฉด,
git commit๋ช ๋ น์ผ๋ก ๋ณํฉ ์ปค๋ฐ์ ์์ฑํ์ฌ ๋ณํฉ์ ์๋ฃํ๋ค. ์ด๋ Git์ ์๋์ผ๋ก ๋ณํฉ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ค.