https://meoweundi.tistory.com/20
์ ๊ธ์์ ๊ฐ์ก๋ ์๋ฌธ์ ์ฌ๋ฐ๋ฅธ ํด๋ต์ ์ฐพ์๋ค.
๐ฉ๐ป๐ป ๋ฌธ์ ์ํฉ ์ ์
๋ก์ปฌ ๋ธ๋์น๋ฅผ local/[๋ธ๋์น๋ช ], ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ remote/[๋ธ๋์น๋ช ]์ผ๋ก ์ง์นญํ๊ฒ ๋ค.
local/feature ๋ธ๋์น์์ ์์ ์ค์ด๊ณ , remote/feature ๋ธ๋์น์ ์ปค๋ฐ์ pushํ ์ ์ด ์๋ ์ํ. ๊ทธ๋ฌ๋ ์์ง ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์งํ ์ค์ธ ์ํฉ. ์ด ์ํฉ์์ remote/main ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ pull ๋ฐ์์์ผ ํ๋ค.
(ex ๋ค๋ฅธ ๋๋ฃ๊ฐ ์์ ํ๋ ๋ธ๋์น๊ฐ ๋ฉ์ธ ๋ธ๋์น์ merge๋์ด ์ด๋ฅผ ๋ด ์ฝ๋์๋ ๋ฐ์ํด์ผ ํ๋ ์ํฉ)
โ ํด๊ฒฐ ๋ฐฉ๋ฒ
1. git checkout [๋ธ๋์น๋ช ]
2. git fetch origin
3. git diff origin
4. git merge origin/main
5. merge์ ๋ํ commit์ ์์ ํ ์ ์๋ vim ์ฐฝ์ด ๋ฌ๋ค. commit ๋ฉ์์ง ์์ ํ :q! ๋ก ์ ์ฅํ๋ค.(๋ฉ์์ง ์์ ์ ์๋ต ๊ฐ๋ฅ)
๋จ๊ณ๋ณ ์์ธํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. pull ๋ฐ์ ๋ธ๋์น๋ก ์ด๋
2. ์๊ฒฉ์ ์ฅ์์ ์์ ๋ด์ญ์ ๋ก์ปฌ์ ์ฅ์์ ๊ฐ์ ธ์จ๋ค.
3. ์๊ฒฉ์ ์ฅ์์ ์์ ๋ด์ญ๊ณผ ๋ก์ปฌ์ ์ฅ์์ ์์ ๋ด์ญ์ ๋น๊ตํ๋ค.
4. ์๊ฒฉ์ ์ฅ์์ main๋ธ๋์น์ ๋ก์ปฌ์ ์ฅ์์ ํ์ฌ ๋ธ๋์น๋ฅผ mergeํ๋ค.
5. merge๋ ์๋ก์ด commit์ ์์ฑํ๋ค. ํด๋น ์ปค๋ฐ์ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. ๋ณดํต ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ ๋์๋ git commit -m "my msg ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์์ฑํ๋๋ฐ, ์ด๋์๋ ๋ฉ์์ง๋ฅผ ์์ฑํ ์ ์๋ ์๋ํฐ์ฐฝ์ด ๋ฌ๋ค. ํด๋น ์๋ํฐ์ฐฝ ์์์ ๋ฉ์์ง๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
ํด๊ฒฐ๋ฒ์ด ๊ถ๊ธํ๋ค๋ฉด ์ฌ๊ธฐ๊น์ง๋ง ์ฝ์ผ์๋ฉด ๋ฉ๋๋ค!
โ๐ป pull ๋์ fetch-merge๋ฅผ ์ฐ๋ ์ด์
fetch์ merge๋ฅผ ํ ๋ฒ์ ํ ์ ์๋ ๋ช ๋ น์ด๊ฐ ์๋ค. ๋ฐ๋ก pull์ด๋ค.
pull์ ๋ฐ๋ก ์ธ ์ ์๋ ์ด์ ๋ ํ์ฌ ๋ก์ปฌ ๋ธ๋์น์ ์๊ฒฉ์ ์ฅ์์ ๋ธ๋์น๊ฐ fast-forward ๊ด๊ณ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. (๋ ๋ธ๋์น ๋ชจ๋ ๊ฐ์์ ์๋ก์ด ์ปค๋ฐ์ ๊ฐ์ง๊ณ ์์ผ๋๊น)
์๊ฒฉ ๋ธ๋์น์ ๋ก์ปฌ ๋ธ๋์น๊ฐ fast-forward ๊ด๊ณ์ผ ๋๋ง pull์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํด ๋์๊ธฐ ๋๋ฌธ์, ํ์ฌ ์ํฉ์์ pull์ ํ๋ฉด pull์ด ์ค๋จ๋๋ค. (Not possible to fast-forward, aborting → ์ด๋ฐ ์๋ฌ ๋ฉ์์ง๊ฐ ๋ฌ๋ค.) ๋ฐ๋ผ์ fetch์ merge๋ฅผ ๊ฐ๊ฐ ์งํํด ์ฃผ์ด์ผ ํ๋ค.
โ๐ป rebase์์ ์ฐจ์ด์
์ด์ ๊ธ์์๋ ์๊ฒฉ์ ์ฅ์์ ์์ ์ ๋ก์ปฌ ๋ธ๋์น์ ๋ด๋ ค๋ฐ๊ธฐ ์ํด rebase๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ก์ปฌ๋ธ๋์น ์ปค๋ฐ๋ค์ ๋ณต์ฌ๋ณธ์ด ์๊ฒจ๋ฌ๋ค(!) ๋๋ ์ด๊ฒ ๋ด๊ฐ rebase๋ฅผ ์๋ชป ์ฌ์ฉํด์ ์๊ธฐ๋ ๋ฌธ์ ์ ์ธ ์ค ์์๋๋ฐ, rebase ์์ฒด์ ํน์ฑ์ด์๋ค.
โฃ rebase ์ดํดํ๊ธฐ
rebase๋ ๋ธ๋์น๊ฐ ๋ถ๊ธฐ๋๋ ์ปค๋ฐ์ ๋ค๋ฅธ ์ปค๋ฐ์ผ๋ก ์ด๋ ์ํจ๋ค. ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ ๊ทธ๋ฆผ์์ feature ๋ธ๋์น๋ ์ปค๋ฐ C2์์ ๋ถ๊ธฐ๋์๋ค. ์ด๋ feature ๋ธ๋์น์์, main ๋ธ๋์น์ ๋ํด rebase๋ฅผ ํ๋ฉด?
์ง์ ๋ถ๊ธฐ์ ์ปค๋ฐ์ด C2์์ C3์ผ๋ก ๋ณ๊ฒฝ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ฒ ๋ถ๊ธฐ์ ์ปค๋ฐ์ ์ด๋ ์ํค๋ ์ด์ ๋ ๋ญ๊น?
๋ฐ๋ก ์ด๋ ๊ฒ, ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ํ ์ค๋ก ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ผํ ์์ ์ rebase๊ฐ ์๋ merge๋ฅผ ์ฌ์ฉํด์ ํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ฆผ์ด ๋ ๊ฒ์ด๋ค.
ํ์คํ rebase๋ฅผ ์ฌ์ฉํ์ ๋์ git ํ์คํ ๋ฆฌ๊ฐ ์ข ๋ ๊น๋ํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โฃ rebase์ ๋ฌธ์ ์
์ ๊ทธ๋ฆผ์ ์ ๋ณด๋ฉด, rebase ๊ทธ๋ฆผ์์ C4, C5, C6์ ๋ฐ์ดํ ํ์๊ฐ ๋์ด์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. C4, C5, C6์ ๋ณต์ฌ๋ณธ์ด๋ผ๋ ์๋ฏธ์ด๋ค.
์ฆ rebase๋ ๊ธฐ์กด์ ์ปค๋ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ ์๋๋ผ, ๊ฐ์ ๋ด์ฉ์ ๋ค๋ฅธ ์ปค๋ฐ์ ์๋ก ๋ง๋ ๋ค. ์ ํํ๋ "feature ๋ธ๋์น์ ๊ธฐ์กด ์ปค๋ฐ์ main ๋ธ๋์น์์ ์ฐจ์ด์ ์ด ๋ฐ์๋" ์ปค๋ฐ๋ค์ ๋ง๋ค์ด ๋ธ๋ค. (์ฐจ์ด์ ์ด ์๋ค๋ฉด ๊ทธ๋ฅ ๋ณต์ฌ๋ณธ์ด ์์ฑ๋๊ณ , ์ฐจ์ด์ ์ด ์๋ค๋ฉด ๋ฐ์๋๋ค.)
๊ทธ ๊ฒฐ๊ณผ ์ ๊ทธ๋ฆผ์ฒ๋ผ ๋์ผํ ๋ด์ฉ์ ์ปค๋ฐ์ด ๋ ๊ฐ์ฉ ์์ฑ๋๋ค.
git ํ์คํ ๋ฆฌ๋ฅผ ํ ์ค๋ก ๊ด๋ฆฌํ ์ ์๋ค๋ ์ฅ์ ์ด ์๊ธฐ๋ ํ๊ณ ์ ๊ทธ๋ฆผ์ฒ๋ผ ๋์ผ ๋ด์ฉ์ ์ปค๋ฐ์ด ์ฌ๋ฌ ๊ฐ ์๊ธฐ๋ ๊ฒ ๋ฌธ์ ๊ฐ ๋์ง ์์ ์๋ ์๋ค. ํ์ง๋ง ์์ง git์ ๋ฐฐ์๋๊ฐ๋ ์ ์ฅ์ธ ๋งํผ merge๋ฅผ ์ฌ์ฉํ ๋ฐฉ์์ ๋จผ์ ์ต์ํด์ง๊ณ ์ ํ๋ค.