ํ์ ํฌ์คํ ์ ์์ฑํ ๋ ๊ฐ์๋ฅผ ํ ๋ฒ ์ดํดํ๋ฉฐ ๋ฃ๊ณ , ํ์ ๊ฐ์๋ฅผ ๋ค์ ๋ค์ผ๋ฉฐ ๊ฒ์๊ธ์ ์ฐ๋ฉด์ ์ ๋ฆฌํ๋ค. ๊ทธ๋ฅ ๊ทธ๋ ๋ค๋ ๋ง์ ํ๊ณ ์ถ์๋ค.
์ด์จ๊ฑฐ๋ ์ด๋ฒ ๊ฐ์๋ git์ ๋ค์ํ merge ๋ฐฉ๋ฒ๊ณผ ๊ทธ ๊ธฐ๋ฅ์ ๋ํด์ ์ค๋ช ํด์ค๋ค.
๋ธ๋์น์ ๊ฐ๊ฐ ์ ๊ท ์ปค๋ฐ์ด ํ๋ ์ด์ ์์ ๋ git merge๋ฅผ ์คํํ๋ฉด ๋ ๋ธ๋์น์ ์ฝ๋๋ฅผ ํฉ์ณ ์๋ก์ด ์ปค๋ฐ์ ์๋์ผ๋ก ์์ฑํ๋ค.

์ด๋ฅผ 3-way merge๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, git merge์ ๊ธฐ๋ณธ ๋์ ๋ฐฉ์์ด๋ค.
์๋ก์ด ๋ธ๋์น์๋ง ์ปค๋ฐ์ด ์๊ณ , ๊ธฐ์ค ๋ธ๋์น(main)์ ์ ๊ท ์ปค๋ฐ์ด ์์ ๊ฒฝ์ฐ git merge๋ฅผ ์คํํ๋ฉด fast-forward merge๊ฐ ๋ฐ์ํ๋ค.
๋ฑํ ํฉ์น ๊ฒ ์์ด์ ๊ทธ๋ฅ ์ ๊ท๋ธ๋์น ๋ณด๊ณ "์ง๊ธ๋ถํฐ ๋ ์ด๋ฆ์ main ๋ธ๋์น์ฌ"ํ๋ ๊ฒ์ด๋ค.

์๋ก์ด ๋ธ๋์น์ ์ปค๋ฐ์ main ๋ธ๋์น๋ก ๊ทธ๋๋ก ์ด๋์ํค๋ฉฐ, ๋ณ๋์ merge ์ปค๋ฐ์ ๋ง๋ค์ง ์๋๋ค.
๋ฌผ๋ก ์ซ์ผ๋ฉด git merge --no-ff ๋ธ๋์น๋ช
์ ์ฌ์ฉํด์ ๊ฐ์ ๋ก 3-way merge๋ฅผ ํ๋ฉด ๋๋ค.
merge๋ฅผ ํ๋๋ผ๋ ๋ธ๋์น๋ ์๋์ผ๋ก ์ญ์ ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ค์ผ ํ๋ค.
git branch -d ๋ธ๋์น์ด๋ฆ: ๋ณํฉ ์๋ฃ๋ ๋ธ๋์น ์ญ์ .git branch -D ๋ธ๋์น์ด๋ฆ: ๋ณํฉ๋์ง ์์(merge ์ ) ๋ธ๋์น ๊ฐ์ ์ญ์ .rebase๋ ๋ธ๋์น์ ์์์ ์ ๋ค๋ฅธ ์ปค๋ฐ์ผ๋ก ์ฎ๊ธฐ๋ ์์ ์ด๋ค.

git switch ์๋ก์ด๋ธ๋์น
git rebase main
git switch main
git merge ์๋ก์ด๋ธ๋์น
rebase & merge๋ฅผ ํ ์ค๋ก ์ฝ๊ฒ ๋น์ ํ์๋ฉด "๊ฐ์ fast-forward merge"๋ค.
์ด๋ณด์๋ค์ ๊ทธ๋ฅ 3-way merge๋ฅผ ์ฐ๋ฉด ๋๋ค๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ๋์ถฉ ๋ชจ๋ ๋ธ๋์น๋ฅผ 3-way merge ํด๋ฒ๋ฆฌ๋ฉด ๋์ค์ ์ฐธ์ฌ๊ฐ ์ผ์ด๋ ์ ์๋ค.
squash and merge๋ ๋ธ๋์น์ ๋ชจ๋ ์ปค๋ฐ์ ํ๋๋ก ํฉ์ณ main ๋ธ๋์น์ ๋จ์ผ ์ปค๋ฐ์ผ๋ก ์ถ๊ฐํ๋ค.

git log์์ ๋ค๋ฅธ ๋ธ๋์น์ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ์ถ๋ ฅ๋์ง ์์ ๊น๋ํ๋ค.git switch main
git merge --squash ๋ธ๋์น๋ช
git commit -m '๋ฉ์ธ์ง'
main ๋ธ๋์น์ log๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๊ณ ์ถ์ ๋ ์ฐ๋ฉด ์ข๋ค.

์กฐ๊ธ ๋ ์ดํด๋ฅผ ํจ๊ณผ ๋์์ ์ต์ํด์ง๊ธฐ ์ํด main branch์ commit3๋ฅผ ๋ง๋ค๊ณ another branch๋ฅผ ๋ง๋ค์ด commit2-1์ ํ๋ค.
์ด๋ฅผ squash and mergeํด๋ณด๋ฉด

์ค๊ฐ์ ์ค๋ฅ๊ฐ ๋จ๊ธด ํ๋๋ฐ another์์ commit๋ ๊ฒฐ๊ณผ๊ฐ ์ญ์ ํด๋ ์ ๋ค์ด์จ ๊ฑธ ๋ณด๋ ๋ ๋ฏ
๊ตฟ
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ ์๋ค
squash and merge ํด๋ณด๊ธฐ. rebase and merge ํด๋ณด๊ธฐ. ๋ฐ๋ผ๋ง ์น๊ฑฐ๋ ๋ณด๊ธฐ๋ง ํ๋ค๊ณ ์ดํด๊ฐ ๋๋ ๊ฑด ์๋๋๊น ๋ค ํด๋ณด๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ค.
๋๋ ํด๋ด์ผ์ง