๋ชฉ์ฐจ
merge ๋ฐฉ๋ฒ๋ค์ ๋ํด ์์ธํ ์์๋ณด์.
1. 3-way
์ ๋ฒ ํฌ์คํธ์์ ๋ค๋ฃจ์๋ merge๋ ์๋์ ๊ฐ์ ํํ์ด๋ค.
์ด๊ฒ์ด ๋ฐ๋ก 3-way merge ์ด๋ค.
๊ฐ branch์ ์๋ก์ด commit์ด ํ๋์ฉ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ํ๋๋ merge์ด๋ค.
์๋ก์ด commit์ 2๊ฐ์ branch๋ฅผ ํฉ์น๋ ๊ฒ์ด๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ๋ผ๊ณ ํ ์ ์๋ค.
2. fast-forward
3-way์ ๋ค๋ฅด๊ฒ ์๋ก์ด branch์๋ง commit์ด ์กด์ฌํ๊ณ
๊ธฐ์กด branch์์๋ commit์ ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์๋์ผ๋ก fast-forward merge๊ฐ ์ํ๋๋ค.
์ด์ฒ๋ผ fast-forward merge๋ผ๋ ํฐ๋ฏธ๋ ๋ฉ์ธ์ง๋ฅผ ํ์ธํ ์ ์๋ค.
๋ง์ฝ fast-forward๋ฅผ ์ํํ๊ณ ์ถ์ง ์๋ค๋ฉด ์๋์ ๋ช ๋ น์ ์ ๋ ฅํ๋ฉด ๋๋ค.
git merge --no--ff ๋ธ๋์น๋ช
- mergeํ ์ดํ branch์ ์ํ(๋ธ๋์น ์ญ์ )
3-way๋ fast-foward merge๋ฅผ ์ํํ๋ฉด ์๋ธ ๋ธ๋์น๋ ์ฌ๋ผ์ง์ง ์๊ณ ๊ทธ๋๋ก ๋จ์์๋ค.
์ด๋ฅผ ์ญ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์๋์ ๋ช ๋ น์ ์ ๋ ฅํ๋ค.
// ๋ณํฉ ์๋ฃ๋ ๋ธ๋์น์ธ ๊ฒฝ์ฐ
git branch -d ๋ธ๋์น๋ช
// ์์ง ๋ณํฉํ์ง ์์ ๋ธ๋์น์ธ ๊ฒฝ์ฐ
git branch -D ๋ธ๋์น๋ช
3. rebase ํ merge(๊ฐ์ fast-forward)
rebase๋,
๋ธ๋์น์ ์์์ ์ ๋ค๋ฅธ commit์ผ๋ก ์ฎ๊ฒจ์ฃผ๋ ๊ฒ์ ๋งํ๋ค.
์ด๋ฅผ ์์๋ก reabase ํ ๋ ๋ธ๋์น์ ๋ณํฉ์
sub๋ธ๋์น์ ์์์ ์ main์ ์ต๊ทผ commit์ผ๋ก ์ฎ๊ฒจ์ค ํ (rebase)
fast-forward merge๋ฅผ ํ๋ค.
์ด๋ฌํ ๋ฐฉ์์ ๊ฐ์ fast-forward merge๋ผ๊ณ ํ๋ค.
์ฌ์ฉ๋ฒ
๋จผ์ ์์์ ์ ์ฎ๊ธธ ์๋ก์ด ๋ธ๋์น๋ก ์ด๋ํ๋ค.
git switch ์๋ก์ด๋ธ๋์น๋ช
main ๋ธ๋์น๋ก rebaseํ๋ค.
git rebase main
๋ค์ main์ผ๋ก ๋์๊ฐ์ fast-forward merge๋ฅผ ์ํํ๋ค.
git switch main
git merge ์๋ก์ด๋ธ๋์น๋ช
rebase๋ฅผ ์ฐ๋ ์ด์ ๋
๋ณต์กํ ๋ธ๋์น ๊ตฌ์กฐ์์ 3-way merge๋ฅผ ํ๋ค๋ณด๋ฉด git log๊ฐ ๋ณต์กํด์ง๋ค.
๊ฐ๋จํ๊ณ ์งง์ ๋ธ๋์น์ ๋ํด์ rebase๋ฅผ ์ฌ์ฉํ๋ฉด ๊น๋ํ๊ฒ ์ ๋ํ ์ ์๋ค.
ํ์ง๋ง ๋จ์ ์
conflict ๋ฐ์ ํ๋ฅ ์ด ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํ๋์ฉ ํด๊ฒฐํด์ฃผ์ด์ผ ํ ์๋ ์๋ค๋ ์ ์ด๋ค.
4. squash ํ merge
squash๋ฅผ ์ด์ฉํ๋ฉด ์กฐ๊ธ ๋ ๊น๋ํ๊ฒ ๋ธ๋์น๋ค์ ํฉ์น ์ ์๋ค.
squash๋ ์์ ๊ทธ๋ฆผ์ฒ๋ผ ํฉ์ณ์ง ๋ธ๋์น์ commit๋ค์
์๋ก์ด commit์ ๋ด๋ ๊ฒ์ด๋ค.
์ฌ์ฉ๋ฒ
main ๋ธ๋์น๋ก ์ฎ๊ฒจ๊ฐ ๋ค
git switch main
์๋์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ squash๋ฅผ ์ํํ๋ค.
git merge --squash ํฉ์น ๋ธ๋์น๋ช
์ดํ commit์ ํ์ฌ merge๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ค.
git commit -m "๋ฉ์ธ์ง"
5. 3-way์ rebase or squash ํ ff ์ ์ฐจ์ด์
3-way์ ๊ฒฝ์ฐ์๋ mergeํ ํ ๋ก๊ทธ๋ค์ ์ดํด๋ณด๋ฉด
main ๋ธ๋์น commit ๋ด์ญ์ด์ง๋ง ํฉ์ณ์ง ๋ธ๋์น๋ค์ ๋ด์ญ๊น์ง ๋ชจ๋ ๋ณด์ฌ์ง๋ค.
์ด๋ commit์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ๋ค์ ๋ํ ๋ด์ฉ์ ์ถ๋ ฅํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
rebase์ squash์ ๊ฒฝ์ฐ์๋
์ด ์ ๋ค์ ์ ๊ฑฐํด์ฃผ๋ ํจ๊ณผ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊น๋ํ๊ฒ ์ ๋์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
'๐ป | CS > Git' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Git&Github] Git ์ ๋ฆฌ-4 (branch, merge) (0) | 2023.10.29 |
---|---|
[Git&Github] Git ์ ๋ฆฌ-3 (.gitignore) (0) | 2023.10.29 |
[Git&Github] Git ์ ๋ฆฌ-2 (w.VSCode, diff) (0) | 2023.10.28 |
[Git&Github] Git ์ ๋ฆฌ-1 (์ต์ด์ค์ , add, commit, status, log) (0) | 2023.10.28 |
๋๊ธ