์ค๋ต๊น ๐ช - ์ค๊ธํธ #8: Rebase ์ค ๋ฐ์ํ๋ ์ถฉ๋ ํด๊ฒฐํ๊ธฐ
by its_TIMI๐น Rebase ์ค ๋ฐ์ํ๋ ์ถฉ๋ ํด๊ฒฐ๋ฒ
Git์ ์ฌ์ฉํ๋ฉด์ Merge Conflict(๋ณํฉ ์ถฉ๋)์ ํ ๋ฒ์ฏค ๊ฒช์ด๋ดค์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ Git์ ๋์ฑ ๊น๋ํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด Rebase๋ฅผ ์งํํ๋ ๊ณผ์ ์์ ์ถฉ๋์ด ๋ฐ์ํ ์๋ ์๋ค.
๐ก “Merge ์ถฉ๋๊ณผ Rebase ์ถฉ๋์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?”
๐ก “Rebase ์ค ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ๊น?”
์ด ๊ธ์์๋ Rebase ์ค ์ถฉ๋์ด ๋ฐ์ํ๋ ์ด์ ์ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํ๋ค.
1๏ธโฃ Rebase๋?
git rebase๋ ํ ๋ธ๋์น์ ๊ธฐ๋ฐ(base)์ ๋ณ๊ฒฝํ์ฌ ์ต์ ์ปค๋ฐ ์๋ก ์ฌ๋ฐฐ์นํ๋ ๊ณผ์ ์ด๋ค.
์ฆ, ๊ธฐ์กด ๋ธ๋์น์ ์ปค๋ฐ์ ๋ค๋ฅธ ๋ธ๋์น์ ์ต์ ์ํ๋ฅผ ๋ฐ์ํ ํ ๋ค์ ์ ์ฉํ๋ ๋ฐฉ์์ด๋ค.
๐น Merge์ Rebase์ ์ฐจ์ด
๋น๊ต ํญ๋ชฉ | Merge | Rebase |
์ด๋ ฅ ๊ตฌ์กฐ | ๋ธ๋์น๊ฐ ๋ณํฉ๋๋ฉฐ, ๋ถ๊ธฐ๋ ๊ธฐ๋ก ์ ์ง | ๊ธฐ์กด ์ปค๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ ์ฉํ์ฌ ๋จ์ผ ์ด๋ ฅ ์์ฑ |
๋ณํฉ ์ปค๋ฐ | ์ ๋ณํฉ ์ปค๋ฐ(merge commit)์ด ์์ฑ๋จ | ๋ณํฉ ์ปค๋ฐ ์์ด ํ์คํ ๋ฆฌ๊ฐ ์ ๋ฆฌ๋จ |
์ถฉ๋ ํด๊ฒฐ ๋ฐฉ์ | ๋ณํฉ ์ ํ ๋ฒ๋ง ์ถฉ๋ ํด๊ฒฐ | ๊ฐ๋ณ ์ปค๋ฐ์ ์ฌ์ ์ฉํ๋ฉด์ ์ถฉ๋ ๋ฐ์ ๊ฐ๋ฅ |
์ฌ์ฉ ์ฌ๋ก | ํ์ ์์ ๋ธ๋์น ๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ช ํํ ๋จ๊ฒจ์ผ ํ ๋ | ๊ฐ์ธ ์์ ์ ์ ๋ฆฌํ๊ฑฐ๋ ๊น๋ํ ํ์คํ ๋ฆฌ๋ฅผ ์ ์งํ ๋ |
๐ ์ฆ, Rebase๋ ๊ธฐ์กด ๋ธ๋์น๋ฅผ ์๋ก์ด ๊ธฐ๋ฐ ์์ ๋ค์ ์ ์ฉํ๋ ๋ฐฉ์์ด๋ฏ๋ก, ์ถฉ๋์ด ๋ฐ์ํ ํ๋ฅ ์ด ๋๋ค.
2๏ธโฃ Rebase ์ค ์ถฉ๋์ด ๋ฐ์ํ๋ ์ด์
Rebase๋ ๊ฐ ์ปค๋ฐ์ ํ๋์ฉ ์ฌ์ ์ฉํ๋ ๊ณผ์ ์ด๊ธฐ ๋๋ฌธ์,
โ ๊ธฐ์กด ์ฝ๋์ ์ถฉ๋ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ค๋ฉด Rebase๊ฐ ์ค๋จ๋ ์ ์๋ค.
Rebase ๋์ค ์ถฉ๋์ด ๋ฐ์ํ๋ ๋ํ์ ์ธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
1๏ธโฃ ๊ธฐ์กด ์ปค๋ฐ์์ ์์ ํ ํ์ผ์, Rebaseํ๋ ค๋ ๋ธ๋์น์์๋ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ
2๏ธโฃ ์ญ์ ๋ ํ์ผ์ Rebase ๋์ค ๋ค์ ์์ ํ๋ ค๊ณ ํ ๊ฒฝ์ฐ
3๏ธโฃ Rebase ๋์ค ์ ์ฉํ๋ ค๋ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ํ์ฌ ์ฝ๋๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ
โก ์ฆ, Git์ด “์ด๋ ์ชฝ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง๋์ง ๋ชจ๋ฅด๊ฒ ๋ค!“๋ผ๊ณ ํ๋จํ ๋ ์ถฉ๋์ด ๋ฐ์ํ๋ค.
3๏ธโฃ Rebase ์ค ์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
Rebase ๋์ค ์ถฉ๋์ด ๋ฐ์ํ๋ฉด Git์ ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๋์ด๋ค.
error: could not apply 123abc... Fix typo in README
๐ ์ด ๋ฉ์์ง๋ ๋ฌด์์ ์๋ฏธํ ๊น?
- 123abc → Rebase ์ค์ด๋ ํน์ ์ปค๋ฐ์ ํด์ ๊ฐ
- "Fix typo in README" → ํด๋น ์ปค๋ฐ ๋ฉ์์ง
- “์ด ์ปค๋ฐ์ ์ ์ฉํ๋ ค๋ค ์ถฉ๋์ด ๋ฐ์ํ์ผ๋ ํด๊ฒฐํด์ผ ํ๋ค!”
์ด์ ํด๊ฒฐํด ๋ณด์.
1๏ธโฃ Rebase ์งํ ์ค ์ํ ํ์ธํ๊ธฐ
git status
โ Git์ด ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์ ์ถ๋ ฅํด ์ค๋ค.
โ ์ด ํ์ผ๋ค์ ์์ ํด์ผ Rebase๋ฅผ ๊ณ์ ์งํํ ์ ์๋ค.
2๏ธโฃ ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ ์์ ํ๊ธฐ
์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์ ์ด์ด๋ณด๋ฉด, Git์ด Conflict Markers(์ถฉ๋ ํ์)๋ฅผ ๋จ๊ฒจ ๋๋๋ค.
<<<<<<< HEAD
console.log("๋๋ main ๋ธ๋์น ์ฝ๋!");
=======
console.log("๋๋ feature ๋ธ๋์น ์ฝ๋!");
>>>>>>> feature-branch
โ HEAD ์๋๋ ํ์ฌ ๋ธ๋์น(main)์ ์ฝ๋
โ ======= ์๋๋ Rebase ๋์ค ์ ์ฉํ๋ ค๋ ์ฝ๋
๐น ์ํ๋ ์ฝ๋๋ก ์์ ํ ํ ์ ์ฅํ๋ค.
console.log("์ต์ข
์ฝ๋: ์ต์ ๋ธ๋์น ์ฝ๋ ๋ฐ์!");
3๏ธโฃ ์์ ํ ํ์ผ์ Git์ ๋ฐ์ํ๊ณ Rebase ๊ณ์ ์งํํ๊ธฐ
git add <์ถฉ๋ ํ์ผ>
git rebase --continue
โ git add . → ์ถฉ๋ ํด๊ฒฐํ ํ์ผ์ ์คํ ์ด์ง
โ git rebase --continue → Rebase๋ฅผ ๊ณ์ ์งํ
๐ Rebase๊ฐ ์์ ํ ๋๋ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ ์ ์๋ค.
4๏ธโฃ Rebase ๋์ค ์ค์ํ์ ๋ ๋๋๋ฆฌ๊ธฐ
Rebase ๋์ค ์ค์ํ๊ฑฐ๋,
“์, ์ด๊ฑฐ ๊ทธ๋ฅ ๋ค์ ์ฒ์๋ถํฐ ํด์ผ๊ฒ ๋ค!๐คฆ๐ปโ๏ธ” ์ถ๋ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
1๏ธโฃ Rebase๋ฅผ ์์ ํ ์ค๋จํ๊ณ ์๋ ์ํ๋ก ๋๋๋ฆฌ๊ธฐ
git rebase --abort
โ Rebase๋ฅผ ์์ํ๊ธฐ ์ ์ํ๋ก ๋์๊ฐ๋ค.
โ ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ด๊ธฐํ๋จ.
2๏ธโฃ ํ์ฌ ์ถฉ๋๋ ์ปค๋ฐ๋ง ๊ฑด๋๋ฐ๊ธฐ
git rebase --skip
โ ์ถฉ๋์ด ๋ฐ์ํ ์ปค๋ฐ์ ๊ฑด๋๋ฐ๊ณ (Rebase์์ ์ ์ธํ๊ณ ) ๊ณ์ ์งํ.
โ ํ์ง๋ง, Rebase ์ดํ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ๋๋ก ๋ฐ์๋์ง ์์ ์๋ ์์ผ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํ๋ค.
3๏ธโฃ ์ถฉ๋ ํด๊ฒฐ ํ Rebase ๊ณ์ ์งํํ๊ธฐ
git rebase --continue
โ ์์ ํ ํ์ผ์ Git์ ๋ฐ์ํ ํ, Rebase๋ฅผ ๊ณ์ ์งํํ๋ค.
5๏ธโฃ Rebase ์ถฉ๋ ํด๊ฒฐ ๊ณผ์ ์ ๋ฆฌ
๋จ๊ณ | ๋ช ๋ น์ด | ์ค๋ช |
1๏ธโฃ | git status | ์ถฉ๋ ๋ฐ์ํ ํ์ผ ํ์ธ |
2๏ธโฃ | ํ์ผ ์์ | <<<<<<< ======= >>>>>>> ์ฌ์ด์ ์ฝ๋ ์์ |
3๏ธโฃ | git add <ํ์ผ๋ช > | ์์ ํ ํ์ผ Git์ ๋ฐ์ |
4๏ธโฃ | git rebase --continue | Rebase ๊ณ์ ์งํ |
๐ก | git rebase --abort | Rebase ์ค๋จ (๋๋๋ฆฌ๊ธฐ) |
๐ก | git rebase --skip | ํ์ฌ ์ถฉ๋ ์ปค๋ฐ ๊ฑด๋๋ฐ๊ธฐ |
๐น ๊ฒฐ๋ก
- Rebase๋ Git ํ์คํ ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ค.
- ํ์ง๋ง ์ถฉ๋์ด ๋ฐ์ํ๋ฉด Merge๋ณด๋ค ๋ณต์กํ ๊ณผ์ ์ด ํ์ํ ์ ์๋ค.
- ์ถฉ๋์ด ๋ฐ์ํ์ ๋ ์ฐจ๊ทผ์ฐจ๊ทผ ํด๊ฒฐํ๋ฉด ๋๋ค.
- ๋ง์ฝ ์ค์ํ๋ค๋ฉด git rebase --abort๋ก ๋๋๋ฆด ์๋ ์๋ค.
๐ฅ Rebase๋ฅผ ํ์ฉํ๋ฉด ํ์ ์ค์๋ ๋ ๊น๋ํ Git ์ด๋ ฅ์ ์ ์งํ ์ ์๋ค!
๋ค์ ๊ธ์์๋ Rebase๋ฅผ ํ์ฉํ ์ค์ Git ์ ๋ฆฌ๋ฒ์ ๋ค๋ฃฐ ์์ ์ด๋ค. ๐
'์ค๋ต ๊น๐ช > ์ค๊ธํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Dev_TIMI
its_TIMI