rebase
์ merge
์ ์ฐจ์ด์ ์ ์ค๋ช
ํ๊ธฐ ์ ์ ๊ณตํต์ ์ ๋จผ์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. ์๋ํ๋ฉด ์ฐจ์ด์ ์ ์ค๋ช
ํ๊ธฐ ์ด์ ์ ๊ณตํต์ ์ ์ค๋ช
ํ๊ฒ ๋๋ฉด ์ด๋ค ๋ถ๋ถ์์ ๊ทน๋ช
ํ ์ฐจ์ด๊ฐ ๋๋์ง ๋ ํ์คํ๊ฒ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
Rebase
์ Merge
๋ชจ๋ ๊ฐ๋ผ์ง ์ํฉ์์ ์ฌ์ฉํ ์ ์๋ ๋ช
๋ น์
๋๋ค.
์ข ๋ ์์ธํ ๋งํ๋ฉด ๋ธ๋์น๊ฐ ๋ ๊ฐ ์ด์ ์๊ณ ์ด ๋ธ๋์น๋ค์ ์๋ง๊ฒ ํฉ์น ๋ ์ฌ์ฉํ๋ ๋ช
๋ น์ด์
๋๋ค.
์ฆ ํฉ์น ๋ ์ด๋ค ์ธก๋ฉด๋ค์ ๊ณ ๋ คํ๋๊ฒ ์ค์ํ์ง์ ๋ฐ๋ผ์ Rebase์ Merge ๋ ์ค์ ์ ํ์ด ๋ ์ฌ์์ง ๊ฒ์
๋๋ค.
1) ์ถฉ๋์ด ์ ์๋๋๊ฐ?
ํฉ์น๋ ๊ณผ์ ์์ ์ถฉ๋์ ๋ถ๊ฐํผ ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํฉ์น๋ ๊ณผ์ ์์ ์ถฉ๋์ ๋ํ ๋ค์ํ ์ ๋ต๋ค์ด ์กด์ฌํ๋ฉฐ ์ด๋ฌํ ์ ๋ต์ด ์ถฉ๋ ๊ด๋ฆฌ์ ์ค์์ฑ์ ๋ํ๋
๋๋ค.
2) ์์ค๋๋ ์ฝ๋๊ฐ ์์ด ํฉ์ณ์ก๋๊ฐ?
์ถฉ๋๊ด๋ฆฌ ๋ฐ ํฉ์น๋ ๊ณผ์ ์์ ์์ค๋๋ ์ฝ๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ์์ฒญํฐ ๋ฆฌ์คํฌ๋ก ๋ฒ์ง ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ฝ๋๋ฆฌ๋ทฐ, CI์ ๋ต๋ฑ์ ํตํด๋ ๋ณด์ํ ์ ์์ง๋ง ๋จผ์ ํฉ์น๋ ์ํฉ์์๋ ์ฝ๋์ ์์ค๋ณด๋ค ์ํํ ๊ฒ์ ์์ ๊ฒ์
๋๋ค.
3) ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ ๋ถ๋ช
ํ๊ฐ?
์ปค๋ฐ ํ์คํ ๋ฆฌ๋ ์ฌ๋ฌ ์ธก๋ฉด์์ ์ค์ํฉ๋๋ค. ํฌํ ํด๋ฆฌ์ค๊ฐ ๋ ์ ์๊ณ , ์๋ฌ๊ฐ ๋ฌ์ ๋ ์ด๋์์ ์ ํํ ๋ฐ์ํ๋์ง ํ๋จํ ๋์๋ ๋๋ฌด ์ค์ํฉ๋๋ค.
์ค์ํ ์ ๋ค์ ํฌ๊ฒ 3๊ฐ์ง์
๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๊ฒ๋ง์ผ๋ก rebase
์ merge
์ ํ๋จ์ ๋ํด์๋ ์ด๋ ต์ต๋๋ค. ์๋ํ๋ฉด ๋๊ฐ์ง์ ์ ํํ ๋์์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค. ๋๊ฐ์ง์ ๋์์ ๋ํ ๋น๊ต๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.
merge๋ ๋จ์ํฉ๋๋ค. main์ผ๋ก ๋ถํฐ ๋ถ๊ธฐ๋ K-branch
์ ๋ชจ๋ ๋ณ๊ฒฝ๊ณผ์ ์ main-branch
์ ํฉ์น๋ฉฐ 1๊ฐ์ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค์ด๋
๋๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ๋ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.(๊ฐ ์ํ๋ฒณ์ ์๋ก๋ค๋ฅธ ์ปค๋ฐ์
๋๋ค)
before merge
A---B---C (K-branch) / D---E---F---G (main-branch)
after merge
A---B---C (K-branch) / \ D---E---F---G---H (main-branch)
k๋ผ๋ ์ฌ๋์ด k-branch๋ฅผ ํ ์ดํ A-B-C์ ์ปค๋ฐ์ ๋ง๋ค์๊ณ ํด๋น branch
์ ๊ธฐ๋ฅ์ ์๋ฃํด์ main-branch
์ merge์ดํ H๋ผ๋ branch
๋ก ๋ค์ ์๊ฒผ์ต๋๋ค.
rebase๋ ๋๊ฐ์ branch
๋ฅผ ํฉ์น๋ค๋ ์ ์์๋ ๋น์ทํ ์ ์์ง๋ง ํต์ฌ ๋์์ ๋ค๋ฆ
๋๋ค.
๋ง ๊ทธ๋๋ ์ฌ๋ฌ branch
์ ์์๊ด๊ณ๋ฅผ ์ฌ๋ฐฐ์นํ๋๋ฐ ์ด์ ์ด ๋ง์ถฐ์ ธ ์์ต๋๋ค.
๋จ์ํฉ์น๋ ๊ฒ์ด ์๋ ๋ฐฐ์น๋ฅผ ํ๋ ๊ฒ์ด๊ธฐ๋๋ฌธ์ ์ฌ๋ฌ ์๋๋ฆฌ์ค๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
์๋๋ฆฌ์ค-1-Before
A---B---C topic / D---E---F---G master
์๋๋ฆฌ์ค-1-After
A'--B'--C' topic / D---E---F---G master
์๋๋ฆฌ์ค-1-After(์ค์ )
D---E---F---G---A'---B'---C' topic
--> ์ค์ ๋ก๋ ํ๋์ ์ ์ด ๋ฉ๋๋ค.
์๋๋ฆฌ์ค-2-Before
H---I---J topicB / E---F---G topicA / A---B---C---D master
๋ช
๋ น์ด
git rebase --onto master topicA topicB
์๋๋ฆฌ์ค-2-After
H'--I'--J' topicB / | E---F---G topicA |/ A---B---C---D master
๋ง๊ทธ๋๋ก ๋ธ๋์น๋ผ๋ฆฌ์ ์ฌ๋ฐฐ์น๊ฐ ์ด๋ฃจ์ด์ง๋๋ค.
์ 2๊ฐ์ ์๋๋ฆฌ์ค ๋ง๊ณ ๋ ๋ ๋ง์ ์๋๋ฆฌ์ค๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ฆ rebase
๋ ๋ธ๋์น๋ผ๋ฆฌ์ ๋ฐฐ์น๋ง์ ํ๋ ๊ฒ์ด ํต์ฌ ๋์์
๋๋ค.
์ด์ ๋์์๋ฆฌ์ ํฉ์น ๋์ ์ค์ํ ์ ์ ์์์ผ๋ ์ฅ๋จ์ ์ ๋น๊ตํด๋ด
์๋ค.
์ฅ์
๋ฌ๋์ปค๋ธ๊ฐ ๋ฎ๋ค : ์์์๋ ๋ณด์๋ฏ์ด ์๋๋ฆฌ์ค๋ 1๊ฐ์ด๋ฉฐ ๊ฒฐ๊ตญ ํฉ์น๊ธฐ๋ง ํ๋ ๋์์
๋๋ค. ๋ฐ๋ผ์ ๋ช
๋ น์ด๋ฅผ ์์ฑํ๋ ๊ฒ๋ ๋จ์ํ๋ฉฐ ์๋์ ์ผ๋ก ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋์ํฉ๋๋ค.
์ถฉ๋๊ด๋ฆฌ๊ฐ ์ฝ๊ณ ์ฝ๋ ์์ค ์ํ์ด ๋ฎ์ : merge ์๋๋ฆฌ์ค-1์ ๋ณด๊ฒ๋๋ฉด master์ ์ต์ ์ปค๋ฐ์ธ G์ topic-branch ๋๊ฐ์ง๋ง์ ์ฝ๋๋น๊ต๋ง์ผ๋ก ์ถฉ๋์ด ๋ฐ์ํ ์ ์๊ฒ๋ฉ๋๋ค. ์ฆ master์ ์ด๋ค ๋ถ๋ถ์ด ์ฌ๋ผ์ง๊ณ ์ด๋ค๋ถ๋ถ์ด ์ถ๊ฐ๋์๋์ง ์๋์ ์ผ๋ก ๋ช
ํํฉ๋๋ค.
๋ฐ๋ผ์ ์ถฉ๋๊ด๋ฆฌ์ ์ฝ๋์์ค ์ํ์ ์ ๋ฆฌํฉ๋๋ค.
๋จ์
์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ์ถ์ ์ด๋ ค์ : merge๋ฅผ ํ๋ฉด ํ๋์ ์๋ก์ด ์ปค๋ฐ์ผ๋ก Main-branch
์ ์ถ๊ฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ ์ ํํ ์ด๋ค ์์
์ ํ๋์ง์ ๋ํ ์ถ์ ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค.
๋ํ ํ์คํ ๋ฆฌ ์ถ์ ์ด ์์ธํ๊ฒ ๋์ง ์์ต๋๋ค.(merge์ด์ branch์์ถ) ๋ฐ๋ผ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ์ ํํ ์ด๋ค ์ปค๋ฐ์์ ๋ฐ์ํ๋์ง ํ๋จํ๊ธฐ ์ด๋ ค์์ง๋๋ค.
์ฅ์
์ปค๋ฐ ํ์คํ ๋ฆฌ ๊น๋ : ์ ํ์ ์ผ๋ก ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๊ด๋ฆฌ๋๊ธฐ๋๋ฌธ์ ์๋ฌ๋ฐ์์ ์ถ์ ์ด ์ฌ์์ง๋ฉฐ, ๋จ๊ณ๋ณ ์ฝ๋ ์ฒดํน์ด ์ฌ์์ง๋ค.
๋จ์
๋ฌ๋์ปค๋ธ๊ฐ ๋๋ค : ์์์ ๋ดค๋ฏ์ด ์๋๋ฆฌ์ค๋ง ์ฌ๋ฌ๊ฐ๊ธฐ ๋๋ฌธ์ ์ด๋ค์ํฉ์์ ์ด๋ป๊ฒ ์จ์ผํ ์ง์ ๋ํ ํ์ต์ด ํ์ํด์ง๋ค. ์ฆ ๋จ์ํ ํฉ์น๋ merge๋ณด๋ค๋ ๋ ๊ณต๋ถํด์ผํ๋ค.
์ถฉ๋ ์ํ์ด ๋๋ค : Merge๋ ์ฌ๋ฌ๊ฐ์ ์ปค๋ฐ์ ์์ถํด์ ํฉ์น๋ค๋ฉด Rebase๋ ์ฌ๋ฌ๊ฐ์ ์ปค๋ฐ์ ํ๋ํ๋ ๋ค์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์์์ ์ถฉ๋์ด ๋ชจ๋ ๋ฐ์ํ๋ฉด ์ถฉ๋๊ด๋ฆฌ๊ฐ ๋งค์ฐ ๋ณต์กํด์ง๋ค.
๋จผ์ ๋ธ๋์น๋ฅผ ํฉ์น๋ ๊ฒ์ ํ์์ด๊ธฐ์ Merge
๋ ๋ฌด์กฐ๊ฑด ์ฌ์ฉํ ์ ๋ฐ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ Rebase
๋ ์ต์
๋์ด๋ค.
โ
์ปค๋ฐ ํ์คํ ๋ฆฌ์ ๋ํ ์๊ตฌ์ฌํญ์ด ์๋(X) ๊ฒฝ์ฐ
๊ฐ์ธ ํ๋ก์ ํธ ๋ฐ ํ ์ดํ๋ก์ ํธ ๊ฐ์ ํ๋ก์ ํธ๋ค์ ๋๋ถ๋ถ ํ์ดํธํ ์ปค๋ฐํ์คํ ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ด๋ ค์ด Rebase
๋ฅผ ์ ๋ชฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
โ
Git/GitHub์๋ จ๋๊ฐ ๋ฎ์ ๊ฒฝ์ฐ
Git ์๋ จ๋๊ฐ ๋ฎ์ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ Merge
๋ฐBranch
๊ด๋ฆฌ๋ง์ผ๋ก๋ ๋ฒ
์ฐฐ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ Rebase
๋ฅผ ๋์
ํ๋ ๊ฒ์ ํ๋ค ๊ฒ์ด๋ค.
โ
์์ฐ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ
Rebase๊น์ง ๊ณ ๋ คํ๋ฉฐ ํ์
์ ํ๋ฉด ์กฐ๊ธ ๋ ์์๊ฐ ์๊ธธ๊ฒ์ด๊ณ ์ด๋ ์์ฐ์ฑ์ ์ ํ(์กฐ๊ธ์ด๋ผ๋..)๊ฐ ๋ฐ์ํ ์ ์๋ค.
โ
์ปค๋ฐ ํ์คํ ๋ฆฌ์ ๋ํ ์๊ตฌ์ฌํญ์ด ์๋(O) ๊ฒฝ์ฐ
๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ ๋ ๋ฆฌ์คํฌ๊ฐ ํฌ๊ฑฐ๋, ์ผ์ ์งํ๋์ ์ ํํ ํ์
์ ์ํด์๋ ์ ํํ๋ฉฐ ์ ํ์ ์ธ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ํ์์ด๋ค.
โ
Git/GitHub์๋ จ๋๊ฐ ๋์ ๊ฒฝ์ฐ
Git์ ์๋ จ๋๊ฐ ๋๋ค๋ฉด ์ถฉ๋๊ด๋ฆฌ๋ ๋ธ๋์น ์ ๋ต์ ๋ํ ๋ถ๋ถ์ ์ด๋ ต์ง์๊ฒ ํด๊ฒฐํ ๊ฒ์ด๋ฉฐ, ์ด๋ด๋๋Rebase
๋ฅผ ๋์
ํด๋ ์ข๋ค.
์ฒ์์๋ ์๊ฐํ๋ค์ํผ ํฉ์น๋ ๊ณผ์ ์์ ์ด์ฉํ๋ฉด ๋๋ค.
1. main branch ๊ฒ์ rebase pulll
git pull origin develop --rebase
1-1. ์ถฉ๋์ด ๋ฐ์ํ๋ค๋ฉด ์ถฉ๋ ํด๊ฒฐ
1-2. ์ถฉ๋์ดํ rebase๊ณ์
git rebase --continue
2. origin/branch๋ก push
main๋ธ๋์น์ ๋ฌด์ฌํ rebase
์๋ฃ ๋์๊ธฐ ๋๋ฌธ์ ํธ์ฌ
git push origin branch
3. GitHub์์ origin/main๋ก rebase merge
์์ ๊ณผ์ ์์ ๋ฌธ์ ์
์ด rebase pull์ด ๋์๋ค๋ฉด ์๋์ ์ผ๋ก rebase-merge๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
์ด๋ ๊ฒ rebase์ merge์ ๋ํด์ ๋ถ์ํ๊ณ ์ฅ๋จ์ , ์ ํฉํ๊ฒฝ, ์ฌ์ฉ๋ฒ์ ์์๋ดค์ต๋๋ค.
์ ๋ฆฌํ์๋ฉด ๋ ๊ฐ๋
์ ํฉ์น๋๋ฐ ์ฌ์ฉํ๋ Git ๋ช
๋ น์ด๋ค์ด๋ฉฐ, ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ปค๋ฐ์คํ ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋๋ฐ์ ์ฌ์ฉํ ์ ์๋ ๋ช
๋ น์ด ์์ต๋๋ค.
๋ค์์ fetch
pull
์ ์์๋ณด๊ฒ ์ต๋๋ค.
pull์ ์ด๋ ต์ง ์์ต๋๋ค. ํ์ฌ ๋ก์ปฌ(local)์ ์์
ํ๋ ๋์ ๋ธ๋์น๊ฐ ์๊ฒฉ(origin)๋ณด๋ค ๋ค์ณ์ง ๋ ์ฌ์ฉํ ์ ์๋ ๋ช
๋ น์ด ์
๋๋ค.
์ฆ ๋ค์ณ์ ธ์๋ ๋งํผ์ ์ปค๋ฐ์ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆผ์ผ๋ก ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
before pull
A---B---C master on origin
/
D---E---F---G master on local
after pull
A---B---C origin/master
/ \
D---E---F---G---H master
1) ๊ธฐ์กด์ ๋ก์ปฌ์ ์๊ฒฉ์๋นํด A
B
C
๋งํผ์ ์ปค๋ฐ์ด ๋ค์ณ์ ธ์์ต๋๋ค.
2) ์ดํ pull๋ช
๋ น์ด๋ก A
B
C
๋ฅผ ๊ฐ์ ธ ์์ง๋ง F
G
๋งํผ์ ๋ณ๊ฒฝ์ฌํญ๊ณผ์ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
3) ์ถฉ๋์ ํด๊ฒฐํ ์ดํ H
๋ผ๋ ์๋ก์ด ๋ฒ์ ์ด ์๊ธฐ๋ฉฐ ๋ค์ณ์ง์์ด ๋ชจ๋ ์๊ฒฉ์ ์ปค๋ฐ์ ๊ฐ์ ธ์ค๋๋ฐ ์ฑ๊ณตํฉ๋๋ค.
git fetch๋ ๋ณํ๋ pull์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ํธํฉ๋๋ค.
fetch์ ์ฃผ๋ชฉ์ ์ ์ฌ๋ฌ๊ฐ์ ๋ธ๋์น(branch)๋ ํ๊ทธ(tag)๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๋ชฉ์ ์
๋๋ค.
์ด ๋ ๊ธฐ์กด์ ์๋ branch์ ์๋ก์ด commit์ด ์๋ค๋ฉด ์ด๋ ๊ฐ์ ธ์ต๋๋ค.
before fetch
A---B---C master on origin
/
D---E---F---G master on local
after fetch
A---B---C---K---L origin/master
/
D---E---F---G master
X---Y origin/feature
1) ๊ธฐ์กด ๋ก์ปฌ์ ์๋ originK
L
์ปค๋ฐ๋ค์ด ๋๊ฒจ์์ง๋๋ค.
2) ๊ธฐ์กด ๋ก์ปฌ์ ์๋ feature-branch
๊ฐ ๊ฐ์ ธ์์ง๋๋ค.
git fetch๋ ์ด๋ ๊ฒ ์๊ฒฉ์ ์ฅ์์ ๋ค๋ฅธ์ ์ ๋ชจ๋ ๊ฐ์ ธ์ค๋ ๋๊ธฐํ
์ญํ ์ ํ๋ค๊ณ ์ดํดํ๋ฉด ํธํฉ๋๋ค.
์ง๊ธ๊น์ง git์ ํต์ฌ ๋ช ๋ น์ด๋ค์ ์์๋ดค์ต๋๋ค. ๊ฐ๊ฐ์ ๋์๊ณผ ์ดํด์ ๋์์ด ๋์์ค๋ฉด ์ข๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค๐
ref :
1) git-merge docs : https://git-scm.com/docs/git-merge
2) git-rebase docs : https://git-scm.com/docs/git-rebase
3) git-pull docs : https://git-scm.com/docs/git-pull
4) git-fetch docs : https://git-scm.com/docs/git-fetch