ํ์ต ๊ณ๊ธฐ
git์ผ๋ก ํ์ ํ ๋ ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ ๋ฐฉ๋ฒ์ด ๋ค์ํ๋ค๋ ๊ฒ์ ์ด๋ฒ์ ์๊ฒ ๋์๋ค. ๊ทธ๋์ ์ด๋ค ๋ฐฉ๋ฒ๋ค์ด ์๋ ์ง ์์๋ณด๊ณ , ์ด๋ฒ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๊ธฐ๋ก ํ squash& Merge ๋ฐฉ๋ฒ์ ๋ํด ๊ธฐ๋กํ๊ณ ์ ํ๋ค.
* ํ๋ก์ ํธ ๊ฒฝํ์ด ์ ์ ์ฌ๋์ด ์์ฑํ ๊ธ์ด๋ฏ๋ก ์๋ชป๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค
Merge
์์ด ๋จ์ด ๋ป์ผ๋ก๋ "๋ณํฉํ๋ค"๋ฅผ ๊ฐ์ง๊ณ ์๋ Merge๋ Git์์ ์๋ก ๋ค๋ฅธ ๋ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ํตํฉํ๋ ์์ ์ ์๋ฏธํ๋ค.
ํ๋์ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ฅ์ด ๋์ ๋์ด์ผ ํ๋๋ฐ ํ ์ฌ๋์ด ๋ชจ๋ ์์ ํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค.
ํ์ ์ผ๋ก ์งํํ ๋ ๋์์ ์์ ์ ์งํํ๋๋ฐ ๊ฐ ์์ ์ ๋ ๋ฆฝ๋ ๋ธ๋์น์์ ๊ฐ๋ฐํ๊ณ Pull Request ๋ฅผ ๋ณด๋ธ ํ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์์ ์ ๊ฑฐ์น๊ณ ๋๋ฉด ์ต์ข ๋ณํฉ ์์ , Merge๋ฅผ ๊ฑฐ์น๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ค.
์ด Merge๋ ๋ณํฉ ๋ฐฉ๋ฒ์ด ๋ ๊ฐ์ง๊ฐ ์๋ค.
1. Fast-foward Merge
์กฐ๊ฑด : ๋ธ๋์น ๊ฐ์ ์์ ์ด ์ ํ์ ์ธ ๊ฒฝ์ฐ (= ํ ๋ธ๋์น์์๋ง ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๊ฒฝ์ฐ)
- ๋ธ๋์น์ ํฌ์ธํฐ๋ฅผ ๋จ์ํ ๋ณํฉ ๋์ ๋ธ๋์น์ ๋์ผ๋ก ์ด๋์ํจ๋ค.
ํํฌ์์ด ๋ด๊ฐ ๋ง๋ ๋ธ๋์น์ด๋ค. ์ด ๋ธ๋์น๋ฅผ main ๋ธ๋์น์ merge ์ํค๊ธฐ ์ํด ์ฌ์ฉํ ๋ฐฉ๋ฒ์ด 1๋ฒ์ Fast-forward Merge ๋ฐฉ๋ฒ์ด๋ค.
์ค์ ๋ก ํฐ๋ฏธ๋์ ๊ทธ๋ ๊ฒ ๋ด์๋๋ฐ ๋ฌด์จ ์๋ฏธ์ธ์ง ๋ชฐ๋์๋ ๊ฒ ๊ฐ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก๋ A๊ฐ ๋ธ๋์น์ ํฌ์ธํฐ์ด๋ฉฐ B๊ฐ ๋ณํฉ ๋์ ๋ธ๋์น์ ๋์ ํด๋นํ๋ค.
2. Three-way Merge
์กฐ๊ฑด : ๋ ๋ธ๋์น์์ ๊ฐ๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ๊ฒฝ์ฐ
- ๋ ๋ธ๋์น์ ๊ณตํต ์กฐ์์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ํฉ์น ์๋ก์ด ๋ณํฉ ์ปค๋ฐ์ด ์์ฑ๋๋ค.
1๋ฒ์ ์ฌ์ง ์ํฉ์ ๋ฐ๋ฅด๋ฉด, A์ B ๋ธ๋์น ๋ชจ๋์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ผ์ด๋์ ํ๋์ ์๋ก์ด ์ปค๋ฐ์ด ์์ฑ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด๋ด ๋๋ ๋ณํฉ ์ถฉ๋์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
1, 2์ Merge ์์ Git์์ ์ ๋ ฅํ๊ธฐ
๋๋ ์์ง ์ด๋ณด๋ผ์ SourceTree ๋ผ๋ UI ํด์ ์ฌ์ฉํ๋๋ฐ (Github desktop๋ ์๊ณ Fork๋ ์๋ค.) ๋ช ๋ น์ด๋ก ํ๋ ๊ฒ ํจ์ฌ ๋น ๋ฅผ ๊ฒ ๊ฐ๊ธด ํ๋ค. ํ์ง๋ง ํ๋ฆ์ ์ดํดํ๊ธฐ ์ํด์ ์ฐ์ UI ํด์ ์ฌ์ฉ์ค์ด๋ค.
git checkout main
git merge [์์
ํ ๋ธ๋์น๋ช
]
checkout์ ์ ๋ ฅํ์ฌ main ๋ธ๋์น๋ก ์ด๋ํ ํ merge ์ํค๋ ๊ฒ์ด๋ผ๊ณ ํด์ํ๋ฉด ๋๋ค.
[์ถ๊ฐ]
Rebase Merge
์ค๋ช : Rebase๋ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณํฉํ๋ ๋์ , ๊ธฐ์กด ๋ธ๋์น์ ์ปค๋ฐ์ ๊ฐ์ ธ์์ ํ์ฌ ๋ธ๋์น์ ๊ฐ์ฅ ์ต์ ์ปค๋ฐ ๋ค์ ์ด์ด๋ถ์ด๋ ๋ฐฉ์์ด๋ค. ๋ณํฉ ์ปค๋ฐ์ด ์์ฑ๋์ง ์๊ณ ์ปค๋ฐ ์ด๋ ฅ์ด ๊น๋ํ๊ฒ ์ด์ด์ง๋ ๊ฒ์ด ํน์ง์ด๋ค.
์ฅ์ : ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋งค์ฐ ๊น๋ํจ
๋จ์ : Rebase ์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ํด๊ฒฐ์ด ๋ณต์กํจ / ํ์ ์ค์๋ ์๋ณธ ์ด๋ ฅ์ ๋ฎ์ด์ฐ๋ฏ๋ก ์ฃผ์ํด์ผ ํจ
- ๊ฐ๋จํ ๋งํ๋ฉด ๋ธ๋์น ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณํฉํ๋ ๋์ , ๋ค์ ๋ฒ ์ด์ค ๋ธ๋์น ์์ ์ฌ์ ์ฉํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
[์ฌ์ฉ ๋ฐฉ๋ฒ]
git checkout [๋ธ๋์น๋ช
]
git rebase main
- ์ฌ๊ธฐ์ ์ถ๊ฐ๋ก, rebase๋ฅผ ์ฌ์ฉํ ๋ ๋ณธ์ธ์ด ์์ ํ ์ปค๋ฐ์ด main ๋ธ๋์น์ ํฌํจ๋๋ ๊ฒ์ ํ์ ์์ ์ํ์ง ์์ ์๋ ์๋ค. ๊ทธ๋ด๋๋ ํน์ ์ปค๋ฐ์ ์ ์ธํ๊ฑฐ๋ ์ ํ์ ์ผ๋ก ์ปค๋ฐ์ ์ ์ฉํ ์ ์๋ค.
Merge Confilct (๋ณํฉ ์ถฉ๋)
์ด ๋ณํฉ ์ถฉ๋์ ๋ ๋ธ๋์น์์ ๋์ผํ ํ์ผ์ด๋ ์ฝ๋์ ๊ฐ์ ๋ถ๋ถ์ ์์ ํ์ ๋ ๋ฐ์ํ๋ ์ถฉ๋์ด๋ค.
Git์ ์๋์ผ๋ก ๋ณํฉํ์ง ๋ชปํ๊ณ ์ถฉ๋์ด ๋ฐ์ํ ๋ถ๋ถ์ ์๋ ค์ฃผ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ํด๋น ๋ถ๋ถ์ ํด๊ฒฐํ ํ Mergeํ๋ค.
์ถฉ๋ ํด๊ฒฐ ํ ๋ณํฉ ์ฝ๋
git add [์ถฉ๋ ํด๊ฒฐ๋ ํ์ผ]
git commit
๊ทธ๋ผ ๊ฐ๋จํ๊ฒ Merge์ ๋ํด ์์๋ดค์ผ๋ ์ด์ Squash & Merge์ Rebast & Merge ๋ฐฉ์์ ์์๋ณด์
Squash & Merge
Squash์ ๋ป์ ๊ฒ์ํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
์ฌ๋ฌ ๊ฐ์ ์ปค๋ฐ์ ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ์น๋ ๊ฒ์ ์๋ฏธํ๋๋ฐ ์์ด ๋จ์ด ๋ป ๊ทธ๋๋ก main ๋ธ๋์น์ Merge ํ ์, ์ด์ ์ ์์ ํ ๋ธ๋์น์ ์ปค๋ฐ์ ํฉ์ณ์ง๋ฉด์ ์ญ์ ๋๋ค.
- ํน์ง : ๋ณํฉํ ๋ ์ฌ๋ฌ ๊ฐ์ ์ปค๋ฐ์ ํ๋์ ์ปค๋ฐ์ผ๋ก ๋ฌถ์ด ๋ฉ์ธ ๋ธ๋์น์ ๋ฐ์
- ์ฌ์ฉ ์ด์ : ์ธ๋ถ์ ์ธ ์ปค๋ฐ ์ด๋ ฅ์ ๋จ๊ธฐ๊ธฐ ๋ณด๋ค๋ ํ๋์ ๊ธฐ๋ฅ์ด ์์ฑ๋ ์ํ์์ ์ ์ฒด ์์
์ ํ๋์ ์ปค๋ฐ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ์ฅ์ : ์ด๋ ฅ ๊ด๋ฆฌ๊ฐ ๋ ๊น๋ํด์ง๋ค.
[์ฌ์ฉ๋ฐฉ๋ฒ]
git checkout main
git merge --squash [๋ธ๋์น๋ช
]
git commit
ํ์ง๋ง ๋ด๊ฐ ์ฌ๊ธฐ์ ๊ถ๊ธํ๋ ์ ์ squash ์ดํ์ commit์ ํ๋ค๋ ๊ฒ์ด๋ค.
์์๋ณด๋ squash ๋ ์ฌ๋ฌ ์ปค๋ฐ์ ํ๋๋ก ํฉ์น๊ณ ํฉ์ณ์ง๊ธฐ ์ ์ ์ปค๋ฐ์ ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๊ฒํ ํ ๊ธฐํ๋ฅผ ์ฃผ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
ํ๋ฆ
- main ๋ธ๋์น๋ก ์ด๋ → merge --squash ์คํ → commit ์งํ
- ๊ฐ๋ฐ์์๊ฒ ๋ณํฉ๋ ์ฝ๋๋ฅผ ๊ฒํ ํ ํ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ ๊ธฐํ๋ฅผ ์ฃผ๊ธฐ ์ํ ๊ฒ์ด๋ค.
- ํ๋๋ก ํฉ์ณ์ง ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ก์ด ์๋ฏธ๋ฅผ ๋ด์ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํด์ผ ํ๋ค. (๊ณผ์ ์ด ๋ชจ๋ ๋ด๊ธด)
์ผ๋ฐ git merge์ squash merge์ ์ฐจ์ด์
- ์ผ๋ฐ git merge ๋ ๋ณํฉ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์ฆ์ ๋ณํฉ ์ปค๋ฐ์ ์์ฑํ์ง๋ง, squash merge๋ ๋ณํฉ ํ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ปค๋ฐํ๋๋ก ์ค๊ณ๋์ด์๋ค.
์์ฝ
๋ณํฉ ๋ฐฉ์ | ๋ณํฉ ์ปค๋ฐ ์์ฑ ์ฌ๋ถ | ์ปค๋ฐ ์ด๋ ฅ ๊ด๋ฆฌ | ์ฃผ์ ์ฌ์ฉ ์ํฉ |
Fast-forward | X | ๊ฐ๋จ | ์ ํ์ ์ธ ์ด๋ ฅ ์ ์ง |
Three-way | O | ๋ช ํ | ๋ ๋ธ๋์น๊ฐ ๊ฐ๊ฐ ๋ณ๊ฒฝ์ด ์์ ๋ |
Squash | X (ํ์ง๋ง ์์ถํ ๋จ์ผ ์ปค๋ฐ์ ์์ฑํจ) | ์์ถ | ์ฌ๋ฌ ์ปค๋ฐ์ ํ๋๋ก ํฉ์น๊ณ ์ถ์ ๋ |
Rebase | X | ๊น๋ | ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํ ๋ |
- Squash๋ ๋ณํฉ์ ์งํํ์ง๋ง ๊ทธ ๋ณํฉ์ ๋ํ ์ปค๋ฐ์ ์์ฑ๋์ง ์๋๋ค. ๊ทธ ๋ณํฉ๋ ๋ด์ฉ์ ๋จ์ผ ์ปค๋ฐ์ผ๋ก ์์ฑํ์ฌ ๊ธฐ๋ก์ ๋ค์ ํด์ผ ํ์ง๋ง ๋ณํฉ ์ปค๋ฐ ์์ฑ์ ์ํ๊ธฐ ๋๋ฌธ์ X์ด๋ค.
์ด๋ฏธ์ง ์ถ์ฒ
https://www.atlassian.com/git/tutorials/using-branches/git-merge
Git Merge | Atlassian Git Tutorial
Git branching intro. Create, list, rename, delete branches with git branch. git checkout: select which line of development you want and navigate branches
www.atlassian.com
rebase ์ด๋ฏธ์ง :
https://hudi.blog/git-merge-squash-rebase/
Git์ ๋ค์ํ ๋ธ๋์น ๋ณํฉ ๋ฐฉ๋ฒ (Merge, Squash & Merge, Rebase & Merge)
ํ์ต ๋ฐฐ๊ฒฝ ์ฐ์ํํ ํฌ์ฝ์ค ๋ฌ๋กํ์์ ๋ธ๋์น ์ ๋ต ๊ฐ์ ๊ณผ ๋ฐฐํฌ์ ๊ด๋ จ๋ ์ด์ผ๊ธฐ๋ฅผ ํ๋ฉด์ ๋ค์ํ ๋ณํฉ๋ฐฉ๋ฒ์ ๋ํ ์ด์ผ๊ธฐ๊ฐ ๋์๋ค. ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๋ฉด์, ์์ง Git์ ๋ค์ํ ๋ณํฉ ๋ฐฉ๋ฒ์ ๋ํ
hudi.blog
'๐ Front-End > Git&Github' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Git] ์ฌ๋ฌ ๊ฐ์ ๊น ์ปค๋ฐ ํ๋ฒ์ ์์ ํ๊ธฐ (2) | 2024.10.31 |
---|---|
[Git] Git Commit Message Conventions - ์ปค๋ฐ ๋ฉ์์ง ๊ท์น (4) | 2024.10.15 |