- ์๋ก ๋ค๋ฅธ ๋ ๋ธ๋์น์ ๋ด์ฉ์ ๋ชจ๋ ๋ฐ์
- Merge๋ ๋ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ ๋ฐ์ํ ์๋ก์ด ์ปค๋ฐ์ ์์ฑ (๋จธ์ง ์ปค๋ฐ)
- Rebase๋ ์ด๋ฅผ ํธ์ถํ ๋ธ๋์น์์ ๋ค๋ฅธ ๋ธ๋์น๋ก base๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ผ๋ก ์๋ก์ด ์ปค๋ฐ์ ์์ฑํ์ง ์๊ณ ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์
git merge {๋จธ์งํ ๋ธ๋์น}
- ํธ์ถํ ๋ธ๋์น์ ๋จธ์งํ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์
- Rebase์์ ๋ฐ์ํ ์ ์๋ ์ํ์ฑ์ ์์
- ํญ์ ๋ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ ๋ฐ์ํ ์ ์ปค๋ฐ์ด ์๊น
- ๋ฐ๋ผ์ ์ปค๋ฐ ๋ด์ญ๊ณผ Git Graph๊ฐ ์ง์ ๋ถํด์ง ์ ์์
- ๋ณ๋์ ์ ์ปค๋ฐ ์์ด ์ ์ชฝ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ๋ ๋ฐ์ํ ์ ์์
- ๋ด๊ฐ ๋ง์น ์๋๋ฐฉ์ด ์์ ํ ์ดํ์ ์์ ํ ๊ฒ์ฒ๋ผ ํ์คํ ๋ฆฌ๊ฐ ๊ธฐ๋ก๋๊ธฐ ๋๋ฌธ์ ๋ธ๋์น ๊ทธ๋ํ๋ฅผ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ ์ ์์
- ๋ฆฌ๋ฒ ์ด์ค์ ๋์ ์๋ฆฌ์ ์ํ ์ํ์ฑ
- ๋จธ์ง๋ ๊ทธ๋ฅ ํ์ฌ ๋ธ๋์น์์ ๋จธ์งํ ๋ธ๋์น์์ ๋ณ๊ฒฝ ๋ด์ญ์ ๋ฐ์ํ ์ ์ปค๋ฐ ์ฐ๊ณ ๋
- ๋ฆฌ๋ฒ ์ด์ค๋ ํ์ฌ ๋ธ๋์น์์ ๋ฆฌ๋ฒ ์ด์คํ ๋ธ๋์น๋ฅผ patch๋ก ๋ง๋ค๊ณ ์ฌ๊ธฐ์ ํ์ฌ ๋ธ๋์น์ ์์
๋ด์ฉ์ ๊ทธ๋๋ก ๋ค์ ์ปค๋ฐํ๋ ๋ฐฉ์์ผ๋ก ๋์
- ์ฆ, base๋ฅผ ๋ฆฌ๋ฒ ์ด์คํ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ์ผ๋ก ์ฎ๊ธด ์ดํ ์์ ์
๋ชจ๋ ์ปค๋ฐ์ด ์๋ก ์์ฑ๋จ
์ปค๋ฐ ํด์๊ฐ ๋ณ๊ฒฝ
๋๊ณ , ๋ฆฌ๋ฒ ์ด์ค ์ด์ ์ ์ปค๋ฐ๊ณผ์์ ํ ๋ค๋ฅธ ์ปค๋ฐ์ผ๋ก ๊ฐ์ฃผ
๋จ
- ์ฆ, base๋ฅผ ๋ฆฌ๋ฒ ์ด์คํ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ์ผ๋ก ์ฎ๊ธด ์ดํ ์์ ์
- ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฏธ ์๊ฒฉ ์ ์ฅ์์ pushํ ์ปค๋ฐ์ rebase ํด์๋ ์ ๋จ
- ๋ด ์์ ์ ๋ํ ์ปค๋ฐ A, B๋ฅผ origin์ push
- ๋ค๋ฅธ ์ฌ๋์ ์์
๋ด์ฉ์ ๋ฐ์ํ๊ณ ์ rebase
- base๊ฐ ์ฌ์ค์ ๋๋ฉฐ ์ดํ์ ์์ ๋ฌผ์ธ A, B ์ปค๋ฐ์ Aโ, Bโ ์ปค๋ฐ์ผ๋ก ๋ณ๊ฒฝ๋จ
- ์ดํ ๋ค๋ฅธ ์์ C๋ฅผ ์ํํด ์ปค๋ฐํ๊ณ origin์ push
- ๊ธฐ์กด์ A, B์ Aโ, Bโ๋ ๊ฐ์ ์์ ์์๋ ๋ค๋ฅธ ์ปค๋ฐ์ผ๋ก ๊ฐ์ฃผ๋จ
-
๋ง์คํฐ์์ ๋ธ๋์น a๋ก ์ฒดํฌ์์ํ๊ณ ์ ์ปค๋ฐ์ ์์ฑ
commit f132497e029781371a1fb6602a27d44947327be7 (HEAD, master, a) Author: ~ Date: ~ a commit (1) commit 2a56f8e097407782b80d01b963b51a5da52052eb Author: ~ Date: ~ Initial commit
-
๋ง์คํฐ์์ ๋ธ๋์น b๋ก ์ฒดํฌ์์ํ๊ณ ๋ ๊ฐ์ ์ ์ปค๋ฐ์ ์์ฑ
commit 5c966a660743e97751b2cc3a02dbb6af52742c95 (HEAD -> b) Author: ~ Date: ~ b commit (2) commit 9d2628054585e816abb2d3c1e1e4805cd2fa0c58 Author: ~ Date: ~ b commit (1) commit 2a56f8e097407782b80d01b963b51a5da52052eb (master) Author: ~ Date: ~ Initial commit
-
๋ง์คํฐ๊ฐ a๋ฅผ ๋ฆฌ๋ฒ ์ด์คํ๊ณ (์ถฉ๋ ์์), b๋ก ์ด๋ํด ๋ง์คํฐ๋ฅผ ๋ฆฌ๋ฒ ์ด์ค(a, b๊ฐ ์์ ๋ด์ฉ ์ถฉ๋)
-
์ถฉ๋ ํด๊ฒฐ ํ
git rebase --continue
๋ช ๋ น์ ํตํด ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ์ํcommit **9d4cf26dcbd273d3ebae0417c105c400f131b333** (HEAD -> b) Author: ~ Date: ~ b commit (2) commit **bfa0260647e48ec204a450c459a1164a14f98e94** Author: ~ Date: ~ b commit (1) commit f132497e029781371a1fb6602a27d44947327be7 (master, a) Author: ~ Date: ~ a commit (1) commit 2a56f8e097407782b80d01b963b51a5da52052eb Author: ~ Date: ~ Initial commit
- master์ base(์์์ )๊ฐ b์์์ master์ ์์น(Initial Commit)์์ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ์๋ํ master(a commit (1))๋ก ์ด๋
- ๊ทธ ์ดํ์ b์ ์ปค๋ฐ์ ์ปค๋ฐ ํด์๊ฐ ๋ชจ๋ ๋ฐ๋
- ๋ณต์ฌํ ๋ธ๋์น์ ์ปค๋ฐ์ ์๋ก ์ฐ๊ณ ์ด๋ฅผ ์ b ๋ธ๋์น๋ก ๊ฐ์ฃผํ๋ฏ๋ก
- ๋ง์ฝ ์๊ฒฉ์ ์์ b์ ์ปค๋ฐ ๋ด์ญ์ด ๋ฐ์๋์ด ์์๋ค๋ฉด 4๋ฒ์ ๊น ํ์คํ ๋ฆฌ๋ฅผ ํธ์ํ ์ ๋ฌธ์ ๊ฐ ๋ฐ์
git fetch {์๊ฒฉ์ ์ฅ์ ๋ณ์นญ} {์๊ฒฉ์ ์ฅ์ ๋ธ๋์น}
- FETCH_HEAD๋ผ๋ ๋ธ๋์น์ ํด๋น ์๊ฒฉ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์
# 1
git config pull.rebase false # merge (the default strategy)
git pull origin {branch}
# 2
git fetch origin {branch}
git merge FETCH_HEAD
# 1
git config pull.rebase true # change strategy to rebase
git pull origin {branch}
# 2
git fetch origin {branch}
git rebase FETCH_HEAD
- ๊ธฐ๋ณธ ์ ๋ต์ rebase๋ก ํ๋ ์ธ๋ถ์ PR์ ์ฌ๋ ค๋๊ณ ์ถ๊ฐ ์์ ํ๋ ๊ฒฝ์ฐ์๋ ์ง์ fetch-merge ์ํ
- ๋ง์ฝ ์ค์๋ก ์ธ๋ถ์ PR ์๋๋ฐ git pull ํด์ rebase๋ฅผ ์๋ํ ๊ฒฝ์ฐ
git rebase --abort
๋ก ๋ฆฌ๋ฒ ์ด์ค ์ทจ์ํ๊ณ ๋ค์ fetch-merge