๐ Git Sqaush๋ก ์ฌ๋ฌ ๊ฐ์ Commit logs ํฉ์น๊ธฐ(Git Rebase)
์๋ ํ์ธ์, ์ด๋ฒ ํฌ์คํ ์์๋ ์ฌ๋ฌ ์ปค๋ฐ๋ค์ ํ๋๋ก ๋ฌถ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ณดํต git์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๋ถํ์ํ๊ฒ ์ปค๋ฐ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
(์๋ฅผ ๋ค๋ฉด.. ๊ฐ๋ฐ ์๋ฒ์์ ํ ์คํธ๋ฅผ ์ํด ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ ์กฐ์๋ฑ์ ๋ถํ์ํ ์์๊ฐ ์๊ฒ ์ต๋๋ค.)
๋ฌดํผ, ์ด๋ฌํ ํ ์คํธ๋ฅผ ์งํํ๋ ค๋ฉด ํ ์คํธ commit - ๋กค๋ฐฑ commit์ผ๋ก ์ต์ 2๋ฒ ์ด์ ๋ถํ์ํ ์ปค๋ฐ์ ์งํํ๊ฒ ๋ฉ๋๋ค.
์ด ๋, Git Squash๋ฅผ ํตํด ๋ถํ์ํ ์ปค๋ฐ ๋ก๊ทธ๋ฅผ ํ๋๋ก ๋ฌถ์ ์ ์์ต๋๋ค. ๋ํ Squash ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด Git Rebase๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ์, ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ด๋ ฅ์ ๋ณด๋ค ๊น๋ํ๊ฒ ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Git Squash & Git Rebase
- Git Squash๋ ์ฌ๋ฌ ๊ฐ์ ์ปค๋ฐ ์ด๋ ฅ์ ํ๋์ ์ปค๋ฐ ์ด๋ ฅ์ผ๋ก ๋ง๋ค๋ ์ฌ์ฉํฉ๋๋ค.
- Git Rebase๋ ๋ ๊ฐ์ ๊ณตํต base๋ฅผ ๊ฐ์ง ๋ธ๋์น์์, A ๋ธ๋์น์ base๋ฅผ B ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ผ๋ก base๋ฅผ ์ฎ๊ธฐ๋ ์์ ์ ์๋ฏธํฉ๋๋ค.(base๋ฅผ ๋ค์ ์ค์ )
๋ถํ์ํ commit ์์
ํ์ฌ ์ํฉ์ ์์ ๊ฐ์ด ์ด 6๊ฐ์ ๋ถํ์ํ ์ปค๋ฐ ๋ก๊ทธ๋ค์ด ์กด์ฌํฉ๋๋ค.
์ด๋ฌํ ๋ถํ์ํ ์ปค๋ฐ๋ค์ Git Squash & Git Rebase๋ฅผ ํ์ฉํ์ฌ ํ๋์ ์ปค๋ฐ์ผ๋ก ๋ฌถ๋ ์์ ์ ํด๋ณด๊ฒ ์ต๋๋ค.
1. rebase ๋ช ๋ น์ด
git rebase -i HEAD~6 // 6 = ํฉ์น๊ณ ์ ํ๋ ์ปค๋ฐ์ ์
์ ๋ช ๋ น์ด๋ฅผ ํตํด rebase ํ๊ณ ์ ํ๋ ์ปค๋ฐ ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
2. ํฉ์น commit log ์ ํ
1. rebase ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์์ ๊ฐ์ด ํธ์ง ์ฐฝ์ด ๋์ค๋๋ฐ์, ์์์ ํฉ์น commit์ ๊ฐ์ฅ ์์ ์กด์ฌํ๋ pick์ s(squash)๋ก ๋ณ๊ฒฝํฉ๋๋ค.
(โป ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์, ๊ฐ์ฅ ์ค๋๋ commit์ pick์ผ๋ก ๋จ๊ฒจ๋์ผ ํฉ๋๋ค. - ์์ ์์์ test1์ธ 8ffdf40 ์ปค๋ฐ)
vim ํธ์ง๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ์์ ๊ฐ์ด ํฉ์น ์ปค๋ฐ์ pick์ s๋ก ๋ณ๊ฒฝํ ํ ์ ์ฅํฉ๋๋ค(esc + :wq)
3. commit message ์์
์์์ #์ ์ฃผ์์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
์ ๋ test1 ~ test6์ ๋ชจ๋ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์ ๊ฑฐํ๊ณ (#) ์๋ก์ด ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ๋จ๊ฒจ๋ณด๊ฒ ์ต๋๋ค.
์ ์์ ์ ์งํํ ํ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ฅํ๊ณ ํธ์ง์ฐฝ์ ๋๊ฐ๋๋ค. (esc + :wq)
4. ๊ฐ์ git push
git push origin -f
๋ง์ง๋ง์ผ๋ก git repository์ ๊ฐ์ ๋ก push๋ฅผ ์งํํ๋ฉด ๋ฉ๋๋ค.
(๊ฐ์ push์ด๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋ธ๋์น๋ก ๊ณต๋์์ ์๊ฐ ์กด์ฌํ๋ฉด ์๋ฉ๋๋ค!!!)
5. rebase ๊ฒฐ๊ณผ
๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด๋ฉด ์ ์์ ์ผ๋ก test1 ~ test6์ commit log๊ฐ ๋จ ํ๋์ commit(rebase test)๋ก ํฉ์ณ์ง ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ง๋ ๋ฒ, push๋ commit์ ์ทจ์ํ๋ ค๊ณ git reset HARD~ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ค๊ฐ ์์ ์ด๋ ฅ์ด ์ฌ๋ผ์ง ๋ป ํ ๊ฒฝํ์ ํ ์ ์ด ์๋๋ฐ์, ๐ฑ ๊ทธ ์ดํ๋ก๋ rebase๋ฅผ ํ์ฉํ์ฌ commit์ ๋ฌถ์ด history๋ฅผ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ๋ ค๊ณ ํ๊ณ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก git reset์ ํด์ ์ด๋ ฅ์ด ๋ ๋ผ๊ฐ๋๋ผ๋, git add๋ฅผ ํด๋์๋ค๋ฉด git fsck๋ผ๋ ๋ช ๋ น์ด๋ฅผ ํตํด ๊ณผ๊ฑฐ ์ด๋ ฅ์ ์ถ์ ์ด ๊ฐ๋ฅํ๋ ์ด๋ฅผ ํตํด ํ๋์ฉ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๊ธด ํฉ๋๋ค. ์ด ์์ ์ ์ถํ ํฌ์คํ ์ ํตํด ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋๊ธ