Git Merge vs Git Rebase
Merge, Rebase
๊ณตํต์
์๋ก ๋ค๋ฅธ ๋ ๋ธ๋์น์ ๋ด์ฉ์ ๋ชจ๋ ๋ฐ์
์ฐจ์ด์
Merge๋ ๋ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ ๋ฐ์ํ ์๋ก์ด ์ปค๋ฐ์ ์์ฑ (๋จธ์ง ์ปค๋ฐ)
Rebase๋ ์ด๋ฅผ ํธ์ถํ ๋ธ๋์น์์ ๋ค๋ฅธ ๋ธ๋์น๋ก base๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ผ๋ก ์๋ก์ด ์ปค๋ฐ์ ์์ฑํ์ง ์๊ณ ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์
Merge
ํธ์ถํ ๋ธ๋์น์ ๋จธ์งํ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์
์ฅ์
Rebase์์ ๋ฐ์ํ ์ ์๋ ์ํ์ฑ์ ์์
๋จ์
ํญ์ ๋ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ ๋ฐ์ํ ์ ์ปค๋ฐ์ด ์๊น
๋ฐ๋ผ์ ์ปค๋ฐ ๋ด์ญ๊ณผ Git Graph๊ฐ ์ง์ ๋ถํด์ง ์ ์์
Rebase
์ฅ์
๋ณ๋์ ์ ์ปค๋ฐ ์์ด ์ ์ชฝ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ๋ ๋ฐ์ํ ์ ์์
๋ด๊ฐ ๋ง์น ์๋๋ฐฉ์ด ์์ ํ ์ดํ์ ์์ ํ ๊ฒ์ฒ๋ผ ํ์คํ ๋ฆฌ๊ฐ ๊ธฐ๋ก๋๊ธฐ ๋๋ฌธ์ ๋ธ๋์น ๊ทธ๋ํ๋ฅผ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ ์ ์์
๋จ์
๋ฆฌ๋ฒ ์ด์ค์ ๋์ ์๋ฆฌ์ ์ํ ์ํ์ฑ
๋จธ์ง๋ ๊ทธ๋ฅ ํ์ฌ ๋ธ๋์น์์ ๋จธ์งํ ๋ธ๋์น์์ ๋ณ๊ฒฝ ๋ด์ญ์ ๋ฐ์ํ ์ ์ปค๋ฐ ์ฐ๊ณ ๋
๋ฆฌ๋ฒ ์ด์ค๋ ํ์ฌ ๋ธ๋์น์์ ๋ฆฌ๋ฒ ์ด์คํ ๋ธ๋์น๋ฅผ patch๋ก ๋ง๋ค๊ณ ์ฌ๊ธฐ์ ํ์ฌ ๋ธ๋์น์ ์์ ๋ด์ฉ์ ๊ทธ๋๋ก ๋ค์ ์ปค๋ฐํ๋ ๋ฐฉ์์ผ๋ก ๋์
์ฆ, base๋ฅผ ๋ฆฌ๋ฒ ์ด์คํ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ์ผ๋ก ์ฎ๊ธด ์ดํ ์์ ์
๋ชจ๋ ์ปค๋ฐ์ด ์๋ก ์์ฑ๋จ
์ปค๋ฐ ํด์๊ฐ ๋ณ๊ฒฝ
๋๊ณ , ๋ฆฌ๋ฒ ์ด์ค ์ด์ ์ ์ปค๋ฐ๊ณผ์์ ํ ๋ค๋ฅธ ์ปค๋ฐ์ผ๋ก ๊ฐ์ฃผ
๋จ
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฏธ ์๊ฒฉ ์ ์ฅ์์ pushํ ์ปค๋ฐ์ rebase ํด์๋ ์ ๋จ
๋ด ์์ ์ ๋ํ ์ปค๋ฐ A, B๋ฅผ origin์ push
๋ค๋ฅธ ์ฌ๋์ ์์ ๋ด์ฉ์ ๋ฐ์ํ๊ณ ์ rebase
base๊ฐ ์ฌ์ค์ ๋๋ฉฐ ์ดํ์ ์์ ๋ฌผ์ธ A, B ์ปค๋ฐ์ Aโ, Bโ ์ปค๋ฐ์ผ๋ก ๋ณ๊ฒฝ๋จ
์ดํ ๋ค๋ฅธ ์์ C๋ฅผ ์ํํด ์ปค๋ฐํ๊ณ origin์ push
๊ธฐ์กด์ A, B์ Aโ, Bโ๋ ๊ฐ์ ์์ ์์๋ ๋ค๋ฅธ ์ปค๋ฐ์ผ๋ก ๊ฐ์ฃผ๋จ
Rebase ๋ฌธ์ ์ ์์
๋ง์คํฐ์์ ๋ธ๋์น a๋ก ์ฒดํฌ์์ํ๊ณ ์ ์ปค๋ฐ์ ์์ฑ
๋ง์คํฐ์์ ๋ธ๋์น b๋ก ์ฒดํฌ์์ํ๊ณ ๋ ๊ฐ์ ์ ์ปค๋ฐ์ ์์ฑ
๋ง์คํฐ๊ฐ a๋ฅผ ๋ฆฌ๋ฒ ์ด์คํ๊ณ (์ถฉ๋ ์์), b๋ก ์ด๋ํด ๋ง์คํฐ๋ฅผ ๋ฆฌ๋ฒ ์ด์ค(a, b๊ฐ ์์ ๋ด์ฉ ์ถฉ๋)
์ถฉ๋ ํด๊ฒฐ ํ
git rebase --continue
๋ช ๋ น์ ํตํด ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ์ํmaster์ base(์์์ )๊ฐ b์์์ master์ ์์น(Initial Commit)์์ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ์๋ํ master(a commit (1))๋ก ์ด๋
๊ทธ ์ดํ์ b์ ์ปค๋ฐ์ ์ปค๋ฐ ํด์๊ฐ ๋ชจ๋ ๋ฐ๋
๋ณต์ฌํ ๋ธ๋์น์ ์ปค๋ฐ์ ์๋ก ์ฐ๊ณ ์ด๋ฅผ ์ b ๋ธ๋์น๋ก ๊ฐ์ฃผํ๋ฏ๋ก
๋ง์ฝ ์๊ฒฉ์ ์์ b์ ์ปค๋ฐ ๋ด์ญ์ด ๋ฐ์๋์ด ์์๋ค๋ฉด 4๋ฒ์ ๊น ํ์คํ ๋ฆฌ๋ฅผ ํธ์ํ ์ ๋ฌธ์ ๊ฐ ๋ฐ์
์ธ๋ถ ์ ์ฅ์์ ์ฝ๋๋ฅผ pullํ๋ ๊ฒฝ์ฐ
fetch?
FETCH_HEAD๋ผ๋ ๋ธ๋์น์ ํด๋น ์๊ฒฉ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์
fetch-merge (default pull)
fetch-rebase
Merge, Rebase ์ ๋ต ๊ฒฐ๋ก
๊ธฐ๋ณธ ์ ๋ต์ rebase๋ก ํ๋ ์ธ๋ถ์ PR์ ์ฌ๋ ค๋๊ณ ์ถ๊ฐ ์์ ํ๋ ๊ฒฝ์ฐ์๋ ์ง์ fetch-merge ์ํ
๋ง์ฝ ์ค์๋ก ์ธ๋ถ์ PR ์๋๋ฐ git pull ํด์ rebase๋ฅผ ์๋ํ ๊ฒฝ์ฐ
git rebase --abort
๋ก ๋ฆฌ๋ฒ ์ด์ค ์ทจ์ํ๊ณ ๋ค์ fetch-merge
Last updated