git rebase ๋์ ๊ณผ์ , ์ฃผ์์ฌํญ, merge vs rebase
git rebase : ํ ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค๋ฅธ ๋ธ๋์น ์๋ก ์ฌ๋ฐฐ์น์ํค๋ ๋ช ๋ น์ด
Rebase์ ์ฅ์
- ๋ณํฉ ์ปค๋ฐ์ด ์์ด ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ์ ๋ฆฌ ๊ฐ๋ฅํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์
- ํน์ ๊ธฐ๋ฅ์ ๋ํ ์ปค๋ฐ๋ค์ ์ฐ์์ ์ผ๋ก ๋ณผ ์ ์์ด ์ฝ๋ ๋ฆฌ๋ทฐ๊ฐ ์ฉ์ด
Rebase ์ฌ์ฉ ์
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ ๊ฐ์ ๋ธ๋์น๋ก ๋๋์ด์ง ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ํฉ์น๊ณ ์ถ์ ์ํฉ์์ ์ฐ๋ฆฌ๋ merge ๋ช ๋ น์ ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ค.
$ git chekcout main
Switched to branch 'main'
$ git merge experiment
Merge made by the 'recursive' strategy.
merge ๋ช ๋ น ์คํ์ ํ์ฌ ๋ธ๋์น(main)๊ฐ๋ฆฌํค๋ ์ปค๋ฐ(c3)๊ฐ mergeํ ๋ธ๋์น(experiment)์ ์กฐ์์ด ์๋๋ฏ๋ก 3-way merge๋ฅผ ํ๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด merge commit(c5)๊ฐ ์์ฑ๋๊ณ main ๋ธ๋์น๋ merge commit์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
์ด์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ rebase๋ฅผ ์ฌ์ฉํ๋ฉด merge commit ์์ฑ์์ด ๊น๋ํ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ์ ์งํ๋ฉฐ ์์ ์ด ๊ฐ๋ฅํ๋ค.
$ git checkout experiment
$ git rebase main
First, rewinding head to replay your work on top of it...
Applying: added staged command
rebase ๋์ ๊ณผ์
- ๊ณตํต ์กฐ์ ์ฐพ๊ธฐ
- ํ์ฌ ๋ธ๋์น(experiment)์ rebase ๋์ ๋ธ๋์น(main)์ ๊ณตํต ์กฐ์์ ์ฐพ์
- ๋ณ๊ฒฝ์ฌํญ(diff) ์์ง
- ํ์ฌ ๋ธ๋์น์ ๊ฐ ์ปค๋ฐ๋ค์ด ๊ฐ์ง๊ณ ์๋ ๋ณ๊ฒฝ์ฌํญ์ ์์ง
- ์ด ๋ณ๊ฒฝ์ฌํญ๋ค์ ์์ ํ์ผ๋ก ์ ์ฅ
- ๋ธ๋์น ๋ฆฌ์
- ํ์ฌ ๋ธ๋์น(experiment)๋ฅผ rebase ๋์ ๋ธ๋์น(main)์ ์ต์ ์ปค๋ฐ์ผ๋ก ๋ฆฌ์
- ๋ณ๊ฒฝ์ฌํญ ์ฌ์ ์ฉ
- ์์ ์ ์ฅํด๋ ๋ณ๊ฒฝ์ฌํญ๋ค์ ์์๋๋ก ์๋ก์ด ์ปค๋ฐ์ผ๋ก ๋ง๋ค์ด ์ ์ฉ
main ๋ธ๋์น ํฌ์ธํฐ์ ์ด๋์ ๋ณ๋๋ก ์ํํ์ง ์๊ธฐ ๋๋ฌธ์ main ๋ธ๋์น๋ก ๋์์ Fast-forwardํ์ฌ ๋ง๋ฌด๋ฆฌํ๋ค.
$ git checkout main
$ git merge experiment
์ด์ฒ๋ผ rebase๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ์ ๋ณ๋ ฌ๋ ์งํํ ์ํฉ์๋ rebase ํ์๋ ๋ชจ๋ ์์ ์ด ์ฐจ๋ก๋ก ์ํ๋ ๊ฒ์ฒ๋ผ ํ์คํ ๋ฆฌ๊ฐ ์ ํ์ด ๋๋ค.
Rebase ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
- ์ด๋ฏธ ๊ณต๊ฐ ์ ์ฅ์์ pushํ ์ปค๋ฐ์ rebaseํ์ง ๋ง๊ธฐ
๋ฐ์ ๊ฐ๋ฅํ ๋ฌธ์
- ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๊ธฐ์กด ์ปค๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ํ์ ๊ฒฝ์ฐ
- ์ด๋ฏธ push๋ ์ปค๋ฐ์ rebaseํ๋ฉด ํ ๋๋ฃ๋ค์ ์์ ์ ํผ๋ ์ด๋
- ์ถฉ๋๊ณผ ์ค๋ณต๋ ์ปค๋ฐ ๋ฐ์ ๊ฐ๋ฅ
๋ฌธ์ ์์ธ : rebase๋ ๊ธฐ์กด์ ์ปค๋ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๋ด์ฉ๋ง ๊ฐ์ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค๊ธฐ ๋๋ฌธ
์ ์ ํ Rebase ์ฌ์ฉ ์ํฉ
- ๋ก์ปฌ์์๋ง ์์ ํ, ์์ง ๊ณต์ ๋์ง ์์ ๋ธ๋์น์์ ์ฌ์ฉ
- main ๋ธ๋์น์ ์ต์ ๋ณ๊ฒฝ์ฌํญ์ feature ๋ธ๋์น์ ์ ์ฉํ๋ ๊ฒฝ์ฐ
Merge vs Rebase ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผ ๋ ๊น?
Merge๋ฅผ ์ ํธํ๋ ๊ด์
- ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ "์ค์ ๋ก ์ผ์ด๋ ์ผ์ ๊ธฐ๋ก"์ด๋ค.
- ํ์คํ ๋ฆฌ๋ ์ญ์ฌ์ ๋ฌธ์๋ก์ ๊ฐ์น๊ฐ ์๋ค.
- ํ์คํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ "๊ฑฐ์ง๋ง"ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
- ๋ณต์กํ merge ์ปค๋ฐ๋ค์ด ์๋๋ผ๋, ๊ทธ๊ฒ์ด ์ค์ ์์ ๊ณผ์ ์ด๋ฏ๋ก ๋ณด์กดํด์ผ ํ๋ค.
Rebase๋ฅผ ์ ํธํ๋ ๊ด์
- ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ "ํ๋ก์ ํธ๊ฐ ๋ง๋ค์ด์ง ๊ณผ์ ์ ์ด์ผ๊ธฐ"์ด๋ค
- ์ฑ ์ ์ด๊ณ ๋ฅผ ๊ณต๊ฐํ์ง ์๋ ๊ฒ์ฒ๋ผ, ์ง์ ๋ถํ ์์ ๊ณผ์ ์ ๋ณด์ฌ์ค ํ์๊ฐ ์๋ค.
- A์์ B๋ก ๊ฐ๋ ๊ณผ์ ์ ๋ ๋ช ํํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
- ๋ฏธ๋์ ๋ ์๋ฅผ ์ํด ๋ ๋์ ๋ฐฉ์์ผ๋ก ์คํ ๋ฆฌ๋ฅผ ์ ๋ฌํ์.
์ ์ ํ ์ฌ์ฉ
- ๋ก์ปฌ ๋ณ๊ฒฝ์ฌํญ์ rebase๋ก ์ ๋ฆฌ
- ์ด๋ฏธ pushํ ๋ด์ฉ์ ์ ๋ rebaseํ์ง ์๊ธฐ
์ฐธ๊ณ ์๋ฃ :
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
Git - Rebasing
Ahh, but the bliss of rebasing isn’t without its drawbacks, which can be summed up in a single line: If you follow that guideline, you’ll be fine. If you don’t, people will hate you, and you’ll be scorned by friends and family. When you rebase stuf
git-scm.com
05-05 rebase
> *SimpleTest 2.1.0๋ฒ์ ๋ฐฐํฌ ํ์ ๋๊ฐ์ง ์ด์๊ฐ ๋ฐ์ํ์๋ค.* > > - *CalcDiv ํจ์ ๊ฒฐํจ : ๋ถ๋ชจ๋ฅผ 0์ผ๋ก ํ์ ๋ ์๋ฌ๋ฐ์, ๋๋์ ๊ฒฐ๊ณผ๊ฐ ์ …
wikidocs.net