์ด๋ฒ์ ์๋ฅ์๋ฅ์ feature
-dev
๊ฐ pr ๋ณํฉ ์ squash merge
๋ฐฉ์์ ์ฑํํ์ต๋๋ค.
์ด๋ฅผ ํตํด dev ์ปค๋ฐ๊ธฐ๋ก์ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ ์ ์์์ต๋๋ค!๐
๋ค์์ ์ ํฌ๊ฐ main
์ squash merge
๋ฅผ ํ๋ ๊ณผ์ ์
๋๋ค. ๊ธฐ์กด main ์ปค๋ฐ๋ค์ด ๋ ์๊ฐ ๊ด๊ณ๋ก ๊ฐ๋จํ ๋์ํํด ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
- main์ hotfix ์ปค๋ฐ์ ์ถ๊ฐ dev์์ ๊ธฐ๋ฅ(d1, d2) ๊ตฌํ
- dev ์ปค๋ฐ๋ค(d1, d2)์ main์ผ๋ก squash merge
- dev์์ ์ดํ ๊ธฐ๋ฅ๋ค(d3, d4) ๊ตฌํ
- dev ์ปค๋ฐ๋ค(d3, d4)์ main์ผ๋ก squash merge ๋ถ๊ฐ!
๋ฌธ์ ๋ 4๋ฒ, main
-dev
๊ฐ ๋ณํฉ ์ ๋ฐ์ํ์ต๋๋ค.
main
์ผ๋ก squash merge
ํ ์ํฉ์์main
์ ์ถ๊ฐ merge ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.(์ ํํ๋, dev๋ฅผ main์ผ๋ก rebase ํ ์ ์์์ต๋๋ค.)์๋์ผ๋ก main์ squash merge
๋ ์ปค๋ฐ(1-2) ์ดํ์ d3, d4 ๋ณ๊ฒฝ์ฌํญ์ ์ ์ปค๋ฐ์ผ๋ก ๋ถ์ฌ์ฃผ๋ฆฌ๋ผ ์์ํ๋๋ฐ ๊ทธ๋ฌ์ง ์์์ต๋๋ค.
๊น์ โ3-4 ๋ณ๊ฒฝ์ฌํญโ์ด โ1-2 squash ์ปค๋ฐโ ์ดํ ๋ฐ์ํ์์ ์ธ์งํ์ง ๋ชปํ๋ ๊ฒ์ด์ฃ .
๊ด๋ จ ์ค๋ช : https://stackoverflow.com/questions/9920182/rebasing-after-squash-merge
์์คํธ๋ฆฌ๋ก ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ ์ํ์์ต๋๋ค.
๋ณด์๋ค์ํผ, Dev(#3)์ dev pr1(d1), dev pr2(d2)๊ฐ squash๋ ์ํ์ด์ง๋ง ๊น์์๋ ๋ถ๊ธฐ๊ฐ ๋๋ ์ ธ ์์ต๋๋คโฆ๐
๋ญ๊ฐ ์ด์ํ ์ ์ด ํ๋ ๋ ์์ง ์๋์? ์ ์ถฉ๋์๋ hotfix
์ปค๋ฐ์ด ๋ ์ฝํ์์ต๋๋ค.
์ฆ, dev์ main์ hotfix๊ฐ ๋ฐ์๋์ง ์์๋ ์ํ์์ต๋๋ค.๐
๊น์์ dev์ main์ ๊ณตํต์กฐ์์ด d2๊ฐ ์๋ Initial commit์ธ ์ด์ ๋
์ฒซ๋ฒ์งธ๋ก ์ด๋ฐ hotfix ๋ณํฉ ๋๋ฌธ์ด๊ณ (๋น์ฐํ hotfix ๋ณํฉ์ผ๋ก ์ค๊ฐ์ ์ ์ปค๋ฐ์ด ์๊ฒผ๋ค๋ฉด, ๊ณตํต์กฐ์์ด dev pr2
๊ฐ ๋ ์ ์์ต๋๋ค.)
๋๋ฒ์งธ๋ก squash merge ๋๋ฌธ์ผ ๊ฒ์
๋๋ค. (squash merge๋ ์ปค๋ฐ์ ์ต์ข
์ ์ผ๋ก ์๋ก์ด ์ปค๋ฐ์
๋๋ค. ๊ณตํต์กฐ์์ด main์ ์๋ dev pr2
๊ฐ ๋ ์๋ ์์ต๋๋ค.)
๋ ๋ฌธ์ ๋ก ์ธํด main ๋ธ๋์น์ dev ๋ธ๋์น๋ ๋ง๋์ง ๋ชปํ ๊ฐ์ ๊ฑด๋์ต๋๋คโฆ
์ ํฌ๋ ์์ ํ ๋ฐฉ์์ผ๋ก ์ถฉ๋์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ๋ค์ ์ฐ๊ตฌํ๊ณ , ๋ค์ 3๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํด๋์ต๋๋ค.
revert
๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ(์ถฉ๋์ด ๊ฐ์ฅ ์ ์)
revert๋ ์ปค๋ฐ์ ๋ด์ฉ์ ๋๋๋ฆฌ๋ ์ปค๋ฐ์ ์๋ก ๋ง๋ญ๋๋ค.
main
์ hotfix
/squash merged
์ปค๋ฐ๋ค์ ์ญ์์ผ๋ก revert
dev
์ด๊ธฐ ์ํ๊ฐ ๋๋๋ก ์ธํ
cherry pick
main ๋ธ๋์น๋ฅผ ๋น๊ต์ ์์ ํ๊ณ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
squash merge
์ปค๋ฐ์ ๋ง์ง๋ง ๋ฐ์์ฌํญ์ ํ์ธํ๋ค.cherry pick
/rebase -i
์ผ๋ก ๊ฐ์ ธ์จ๋คforce-push
main ๋ธ๋์น๋ฅผ ๊ฐ๋จํ๊ณ ๊ฐ์ฅ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ ์ ์์ง๋ง ๋ค์ ์ํํ ๋ฐฉ๋ฒ
force push
ํ๋ค.force push
๋ฅผ ํตํด ํด๊ฒฐํ๋ค์ ํฌ๋ ์ 3๊ฐ์ง ๋ฐฉ๋ฒ ์ค 3๋ฒ ๋ฐฉ๋ฒ์ ๋ณํํด ์งํํ์ต๋๋ค. ์ฌ๋ฌ ์ฐ์ญ๊ณก์ ์ด ์์๊ธฐ ๋๋ฌธ์ ์ปค๋ฐ ๊ธฐ๋ก์ ๊น๋ํ์ง ์์ง๋ง, ์์ค๋ ์ฝ๋ ์์ด ๋ฐฐํฌ๋ฅผ ์๋ฃํ์ต๋๋ค.
1๋ฒ ๋ฐฉ๋ฒ์ ์ต์ข ์ ์ผ๋ก ์๊ฐํด๋ด๋ ๋ฐ์ ์๊ฐ์ด ๊ฑธ๋ ธ๊ณ , ๊ฐํ ๊ด๋ จ conflict ์ฒ๋ฆฌ์ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค.
2๋ฒ ๋ฐฉ๋ฒ์ ์๋ํ์ง๋ง main์ 1.1 release ์ดํ dev์ ์ปค๋ฐ๋ ์ผ๋ถ feature์ ๊ฒฝ์ฐ squash merge๊ฐ ์๋ ์ผ๋ฐ merge๋ก ํตํฉ๋์๊ธฐ ๋๋ฌธ์ ์์ ํ ์ฒด๋ฆฌํฝ์ด ์ด๋ ค์ ์ต๋๋ค.(์ฒด๋ฆฌํฝ ํ ์ปค๋ฐ ์๊ฐ 70์ฌ๊ฐ์ ๋ฌํ์ต๋๋ค.)
๋ฐ๋ผ์ ๋ฐฐํฌ๋ฅผ ์๋ ์ํฉ์์ force push๋ฅผ ํ๊ฒ ๋์์ต๋๋ค.
์์ผ๋ก์ ์ถฉ๋ ์ํฉ์์ force push๋ฅผ ํผํ ์ ์๋ 1, 2๋ฒ ๋ฐฉ๋ฒ๋ค์ ๊ณ ๋ คํด๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
dev
โmain
pr ์squash merge
๋ฅผ ํ์ง ๋ง์!
(์ด๋ฏธfeature
โdev
์์squash merge
๋ก ์ปค๋ฐ๋ค์ด ๊ด๋ฆฌ๋๊ณ ์๋ค.)
main์ hotfix๋ฅผ ๋ฐ์ํ๋ค๋ฉด, ๊ธฐ์กด dev์๋ hotfix๋ฅผ ๋ฐ์ํด์ผ ํ๋ค.
(์ฆ, main๊ณผ dev์ ๊ณตํต์กฐ์์ด hotfix๊ฐ ๋๋๋ก ์ค์ ํด์ผ ํ๋ค.)
์๋๋ฉด main์ dev๋ก force-push ํ๊ฑฐ๋ dev๋ฅผ ์ญ์ ํ ์ฌ์์ฑํด์ผ ํ๋ค.
(์ด๋ ๊ธฐ์กด pr๋ค์ merge ํ๊ฒ์ dev๋ก ์ฌ์กฐ์ ํด์ผ ํ๋ค.)
๋๋๋ก main์ force push๋ฅผ ํ์ง ๋ง์!
squash merge
๊ด๋ จRebasing after squash merge?
[Git] Squash and Merge ํ Rebase๋ฅผ ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์
force push
๊ด๋ จWhy is it dangerous to do a force-push against a remote repository?
revert
๊ด๋ จgit revert ์ฌ์ฉ๋ฒ: ์ด๋ฏธ ์ปค๋ฐํ ๋ด์ฉ์ ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ
Learn Git Branching
Squash Merge ํ Rebase์ ๋ฐ์ํ๋ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ๐