2025. 8. 9. 00:35ใํ์ /Git

๋ชฉ์ฐจ
1. Git ๋ธ๋์น ๋จธ์ง ์ ๋ต
2. ์ ๋ต1 : Merge Commit
3. ์ ๋ต2 : Squash and Merge
4. ์ ๋ต3 : Rebase and Merge
5. Rebase + Squash๋ก ์ปค๋ฐ ๊ธฐ๋ก ๊น๋ํ๊ฒ ์ ๋ฆฌํ๊ธฐ
1. Git ๋ธ๋์น ๋จธ์ง ์ ๋ต
Git์์ ๋ ๊ฐ์ ๋ธ๋์น๋ฅผ ํ๋๋ก ํฉ์น๋ ์์ ์ merge๋ผ๊ณ ํ๋ค.
๋ฒ ์ด์ค ๋ธ๋์น๊ฐ ๋ค๊ฐ์ด ๊ณต์ ํ๋ ๋ฉ์ธ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ , ๊ฐ๋ฐ ์์ ์ ํ ๋๋ ๋ฒ ์ด์ค๋ก๋ถํฐ ๋ธ๋์น๋ฅผ ๋ฝ์๋ด์ ์งํํ๋ค.
๋ธ๋์น๋ค์ ๋ฒ ์ด์ค ๋ธ๋์น์ ๋ณํฉํ ๋์ ์ ๋ต์ด ๋ช๊ฐ์ง ์๋ค.
- Merge Commit
๋ชจ๋ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๋ณด์กดํ๋ฉฐ ๋ณํฉ - Squash and Merge
์ฌ๋ฌ ์ปค๋ฐ์ ํ๋์ ์ปค๋ฐ์ผ๋ก ์์ถํ์ฌ ๋ณํฉ - Rebase and Merge
์ปค๋ฐ๋ค์ ๋ฒ ์ด์ค ๋ธ๋์น ์๋ก ์ฌ๋ฐฐ์นํ์ฌ ์ ํ์ผ๋ก ๋ณํฉ
Github์์ PR์ ์ฌ๋ฆฐ ํ, ๋ณํฉํ ๋ ๋จธ์ง ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์๋ค.

2. ์ ๋ต1 : Merge Commit
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
- ๋ ๋ธ๋์น์ ๋ชจ๋ ์ปค๋ฐ ๊ธฐ๋ก์ ํฌํจํ๋ค.
- ๋ณํฉํ ๋ ์๋ก์ด merge commit์ด ์์ฑ๋๋ค.
- ๋ธ๋์น์ ์ ์ฒด ๊ฐ๋ฐ ๊ณผ์ ๊ณผ ํ์คํ ๋ฆฌ๋ฅผ ๋ชจ๋ ์ถ์ ํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค.
๊ธฐ๋ณธ ๋จธ์ง๋ ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋๋ ์ง๋ค.
- Merge (Fast-Forward)
- Merge (Recursive) ← ๋ ์ผ๋ฐ์ ์
1. Merge (Fast-Forward)
์์ ๋ธ๋์น์์ (๋ณ๊ฒฝ์ฌํญ์ด ์๋) ๋ฒ ์ด์ค ๋ธ๋์น๋ก ๊ทธ๋๋ก ์ธ์ ์ฎ๊ฒจ ๋ถ์ด๋ ๋ฐฉ์์ด๋ค.
์ด ๋ฐฉ์์ผ๋ก ์งํํ๋ ค๋ฉด ๋ฒ ์ด์ค ๋ธ๋์น๋ก๋ถํฐ ์์ ๋ธ๋์น๋ฅผ ๋ด๊ณ , ์ดํ์ ๋ฒ ์ด์ค ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ด์ผ ํ๋ค.
์ฌ์ค ํ ํ๋ก์ ํธ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์๋ ๊ทธ๋ฆผ์์ ์ ํ๋ = ์ปค๋ฐ ๊ธฐ๋ก ํ๋์ด๋ค.

2. Merge (Recursive)
์ด๊ฒ ์ผ๋ฐ์ ์ธ ๋จธ์ง ๋ฐฉ์์ผ๋ก, ๋ฒ ์ด์ค์์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ด๋ ๋จธ์ง๋ฅผ ํ ์ ์๋ค.
์์ ๋ธ๋์น์์ ์์ ์ ํ๋ค๊ฐ ๋ฒ ์ด์ค ๋ธ๋์น์ ๋๋ถ๋ถ์ผ๋ก merge commit์ ์์ฑํ๋ฉฐ ๋ณํฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ชจ๋ ํ์คํ ๋ฆฌ๋ฅผ ๋ณด์กดํ๊ธฐ ๋๋ฌธ์ ๋ฒ ์ด์ค๊ฐ ๋ง์ด ๋ฑ๋ฑํด์ง ์๋ ์๋ค.

https://leetrue.hashnode.dev/branch-merge-strategy
๋ด๊ฐ ๊ฐ์ง merge commit์ด ์์ด์ ๋๊ตฐ๊ฐ์ ๊ฒ์ ์์๋ก ๊ฐ์ ธ์๋ดค๋ค.
ํ๋์ : ๋ฒ ์ด์ค(main) ๋ธ๋์น
๋๋จธ์ง : ์์ ๋ธ๋์น
์์ ๋ธ๋์น๋ฅผ ์์ฑํ ๋ ๋ฒ ์ด์ค ๋ธ๋์น์์ ๋์๋ค๊ฐ,
๋ณํฉํ ๋ ๋ค์ ๋ค์ด๊ฐ๋๋ฐ ๊ทธ ๋ ๊ฐ์ง๋ ๊ฒ์ด merge commit์ด๋ค.
๋ชจ๋ ์ปค๋ฐ ๊ธฐ๋ก๋ค์ด ๊ธฐ๋ก๋๋ฉด์๋ ํ์คํ ๋ฆฌ๊ฐ ์ข ์ง์ ๋ถํด๋ณด์ผ ์ ์๋ค.

merge ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
git checkout main
git merge feature/branch
3. ์ ๋ต2 : Squash and Merge
์์ ๋ธ๋์น์์ ์๊ธด ์ฌ๋ฌ ๊ฐ์ ์ปค๋ฐ์ ํฉ์ณ์ ํ๋์ ์ปค๋ฐ์ ๋ฒ ์ด์ค ๋ธ๋์น์ ์ถ๊ฐํ๋ค.
merge commit๊ณผ ๋ค๋ฅด๊ฒ ํ์คํ ๋ฆฌ๊ฐ ๋ฑ๋ฑํด์ง์ง ์๋๋ค.
์์
๋ธ๋์น์์ ์์ฑํ๋ ์ปค๋ฐ ๊ธฐ๋ก๋ค์ด ์์ด์ง๊ณ squash merge๋ฅผ ์งํํ ๋ ์
๋ ฅํ๋ ์ปค๋ฐ๋ฉ์ธ์ง๋ง ๋จ๊ฒ๋๋ค.
์์
์ ๋ํ ํ์คํ ๋ฆฌ๋ฅผ ๋ฐ๋ก ๊ธฐ๋กํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ ์ปค๋ฐ ๋ฐ๋๋ก ์์ฑํด์ผํ๋ค.

๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
git checkout main
git merge --squash feature/branch
git commit -m "์ปค๋ฐ ๋ฉ์ธ์ง ์
๋ ฅ"
4. ์ ๋ต3 : Rebase and Merge
๋ง ๊ทธ๋๋ก base๋ฅผ ์ฌ์ค์ ํ๋ ๋จธ์ง๋ผ๋ ๋ป์ด๋ค.
๋ฒ ์ด์ค ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒจ ์๋ก์ด ์ปค๋ฐ๋ค์ด ์ถ๊ฐ๋์์ ๊ฒฝ์ฐ,
๋ณํฉํ ๋ ์์ ๋ธ๋์น๋ฅผ ๋ฝ์ ์์น๊ฐ ์๋ ์ต์ ์์น๋ฅผ base๋ก ํ์ฌ ์์ ์ปค๋ฐ๋ค์ ์ด๋ ค ๋ณํฉํ๋ค.(์ด ๊ณผ์ ์์ ์ปค๋ฐ์ ํด์๊ฐ์ด ๋ฐ๋๋ค)
์ด๊ฑด ๋ด git graph๋ฅผ ์์๋ก ๋ณด์.

์์ ์ฌ์ง์ ๋ณด๋ฉด ํ์คํ ๋ฆฌ๊ฐ ์๋นํ ๋ฑ๋ ํ๋ฐ,
์ด๊ฑด ์์ง pr๋ง ์ฌ๋ผ๊ฐ๊ณ ๋จธ์ง๊ฐ ์๋ ๋ธ๋์น๋ค์ด๋ค.
๋จธ์งํ๋ฉด ์ ํ์ผ๋ก ๋ ์ฌํด์ง๋ค.
main ๋ธ๋์น๋ก๋ถํฐ ์์ ๋ธ๋์น๋ฅผ ๋ฝ๊ณ ,
๋จธ์งํ๋ฉด ๊ทธ๋๋ก main ๋ธ๋์น์์ ์ปค๋ฐ์ ํ์ธํ ์ ์๋ค.

๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
git checkout feature/branch
git rebase main
# ์ถฉ๋ ํด๊ฒฐ
git add .
git rebase --continue
5. Rebase + Squash๋ก ์ปค๋ฐ ๊ธฐ๋ก ๊น๋ํ๊ฒ ์ ๋ฆฌํ๊ธฐ
rebase์ squash๋ฅผ ๊ฐ์ด ์ฌ์ฉํด์ ์ปค๋ฐ ๊ธฐ๋ก์ ๊น๋ํ๊ฒ ์ ๋ฆฌํ ์ ์๋ค.
์์ ๋ธ๋์น์์ squash๋ก ์ปค๋ฐ ๊ธฐ๋ก์ ์ ๋ฆฌํ๊ณ
๋ฒ ์ด์ค ๋ธ๋์น๋ก ํฉ์น ๋ rebase๋ฅผ ํ๋ ๊ฒ์ด๋ค.
| ๋ชฉ์ | squash๋ง | rebase + squash |
| ๋ณํฉ ์ ์ปค๋ฐ 1๊ฐ๋ก ์์ถ | โ ๊ฐ๋ฅ (merge --squash) | โ ๊ฐ๋ฅ |
| ๋ถํ์ํ ์ปค๋ฐ ์ ๋ฆฌ | โ ๋ชปํจ (์ปค๋ฐ ๋ด์ฉ ์์ ๋ถ๊ฐ) | โ ๊ฐ๋ฅ |
| ์ปค๋ฐ ์์ ๋ณ๊ฒฝ/์์ | โ ๋ชปํจ | โ ๊ฐ๋ฅ |
| ์ปค๋ฐ ๋ฉ์์ง ๋ณํฉ/ํธ์ง | โ GitHub UI์์ ์๋ | โ CLI์์ ์ธ๋ฐํ๊ฒ ์กฐ์ ๊ฐ๋ฅ |
| ์์ ๋ธ๋์น ์์ฒด๋ฅผ ๊น๋ํ๊ฒ ๋ง๋ค๊ธฐ | โ ์ ๋จ | โ ๋จ |
์์ ์ค ๋ฒ ์ด์ค ๋ธ๋์น ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒผ์ ๊ฒฝ์ฐ,
# ์์
๋ธ๋์น: feat/button
# ๋ฒ ์ด์ค ๋ธ๋์น: main
git checkout feat/button
git fetch origin
git rebase origin/main
# .... ์ถฉ๋ ํด๊ฒฐ ....
git add .
git rebase --continue
๋ฉ์ธ์ fetch, rebase ํ๋ฉด ๋๋ค.
์ด๋ฏธ ์ฌ๋ฆฐ PR์ ์ต์ ๋ฒ ์ด์ค ๋ธ๋์น๋ฅผ ๋ฐ์ํ๋ ค๋ ๊ฒฝ์ฐ
git checkout feat/button
git fetch origin
git rebase -i origin/main
#vim์์ squash, pick ์งํ
pick a1b2c3 add button ui
squash a2b3c4 fix typo
reword a3c4b5 final
git push -f
์ด๋ด๋ ์ปค๋ฐ ํด์๊ฐ ๋ณ๊ฒฝ๋๋ฏ๋ก ๊ผญ pushํ ๋ -f(--force)๋ฅผ ํจ๊ป ํด์ผํ๋ค.
์ฐธ๊ณ
https://adjh54.tistory.com/665
[Github] ๋ธ๋์น ๋ณํฉ ์ ๋ต(Branch Merge Strategy) ์ดํดํ๊ธฐ: Merge Commit, Squash, Rebase
ํด๋น ๊ธ์์๋ ๋ธ๋์น ๋ณํฉ ์ ๋ต์ ๋ํด ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์์ฑํ ๊ธ์ ๋๋ค. 1) ๋ณํฉ(Merge)๊ณผ ํ ๋ฆฌํ์คํธ(Pull Request)1. ๋ณํฉ(Merge)๐ก ๋ณํฉ(Merge)- ํ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค๋ฅธ ๋ธ๋์น๋ก ํตํฉํ๋
adjh54.tistory.com
https://leetrue.hashnode.dev/branch-merge-strategy
'ํ์ > Git' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Git Flow ๋ธ๋์น ์ ๋ต์ ๋ญ๊น (1) | 2025.08.09 |
|---|---|
| ์ปค๋งจ๋ (Command) (4) | 2025.08.03 |
| 3. git์ผ๋ก ๋ก์ปฌ์ ์ฅ์ ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ (0) | 2022.07.22 |
| 1. git ์ค์นํ๊ณ ์ฌ์ฉ์์ค์ ํ๊ธฐ (0) | 2022.07.19 |
GitHub