git commit -m "Blog Posting #3๐ซก"
๊ฐ๋ฐ์ํ์ ์ ํ์ ๋๊ตฌ
Pull = Fetch + Merge: ์๊ฒฉ Github์์ ์ต์ ๋ธ๋์น ๊ฐ์ ธ์ค๊ธฐ
๋ก์ปฌ ๋ธ๋์น๋ฅผ ์๊ฒฉ ๋ธ๋์น์ ๋๊ธฐํํ๊ธฐ ์ํด์ `git pull`๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๋ช ๋ น์ด๋ ์ฌ์ค ๋ ๊ฐ์ ์์ ์ ๊ฒฐํฉํ ๊ฒ์ผ๋ก `fetch`์ `merge`๊ฐ ํจ๊ป ์คํ๋๋ค.
- Fetch: ์๊ฒฉ์ ์ฅ์์์ ์ต์ ์ปค๋ฐ์ด๋ ๋ธ๋์น๋ฅผ ๋ก์ปฌ ์ ์ฅ์๋ก ๊ฐ์ ธ์ค๋ ์์ . ์ด ๊ณผ์ ์์ ์๊ฒฉ ์ ์ฅ์์์ ์๋ก ์์ฑ๋๊ฑฐ๋ ์ญ์ ๋ ๋ธ๋์น ๋ฐ ์ต์ ์ฝ๋๊ฐ ๋ก์ปฌ๋ก ๋ด๋ ค๋ฐ์์ง๋ค.
git fetch -p
`git fetch -p` → `p = prune`
- Merge: ๊ฐ์ ธ์จ ์๊ฒฉ๋ธ๋์น์ ์ต์ ์ฝ๋๋ฅผ ๋ก์ปฌ ๋ธ๋์น์ ํ์ฌ ์ฝ๋์ ๋ณํฉํ๋ ์์
. ์ด ๊ณผ์ ์์ ๋ก์ปฌ ๋ธ๋์น์ ์๋ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ์๊ฒฉ ๋ธ๋์น์ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ํฉ์น๋ค.
- ์๊ฒฉ์ ์๋ `branch`์ ์ต์ ์ฝ๋๋ฅผ ๋ก์ปฌ์ ์๋ `branch`์ ๊ตฌ์ ์ฝ๋์ ํฉ์น๋ค.
git merge FETCH_HEAD
`FETCH_HEAD`๋ `git fetch`๋ก ๊ฐ์ ธ์จ ์ต์ ์ปค๋ฐ์ ๊ฐ๋ฅดํจ๋ค.
- FETCH_HEAD: ๋ก์ปฌ์์ ์๊ฒฉ์ผ๋ก๋ถํฐ ๊ฐ์ ธ์จ ์ต์ ์ปค๋ฐ
- HEAD: ํ์ฌ ๋ก์ปฌ ๋ธ๋์น์ ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ. ์๊ฒฉ ๋ธ๋์น์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก `origin/main`๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ๋ธ๋์น
- Remote ์๊ฒฉ์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ: ๋งจ ์ฒ์์ Remote ์๊ฒฉ์ผ๋ก๋ถํฐ `git clone`ํ์ฌ ๊ฐ์ ธ์์ ๋ ํ๊ธฐํ ๊ธฐ๋ณธ ๋ธ๋์น(์, main)
- Local ๋ก์ปฌ์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ: `HEAD →. main` = ํ์ฌ ์์ ์ค์ธ ๋ธ๋์น์ผใ ์์ ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ
- ORIG_HEAD: `HEAD` ์ง์ ์ํ. ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ณต๊ตฌํ๋ ๋ฐ ์ฌ์ฉ ๊ฐ๋ฅ.
- MERGE_HEAD: FETCH_HEAD + ๋ก์ปฌ HEAD, ์ด ๋ ๊ฐ๋ฅผ ํฉ์น ๋ ์ถฉ๋ ๋ฐ์ ์ ์ถฉ๋ ํด๊ฒฐ ์ํ ๋ณํฉ ์ปค๋ฐ
Local(Git) Branch์ Remote(Github) Branch ๋๊ธฐํ ์ Conflict ํด๊ฒฐ
๋ธ๋์น๋ฅผ ๋ณํฉํ ๋ Conflict(์ถฉ๋)๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ถฉ๋์ ๋ ๋ช ์ด์์ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ํ์ผ์ ๋์ผํ ๋ถ๋ถ์ ์์ ํ์ ๋ ๋ฐ์ํ๋ฉฐ, Git์ ์๋์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ผ๋ฏ๋ก ์๋์ผ๋ก ํด๊ฒฐํด์ผํ๋ค.
`git pull`์ ์คํํ ๋ ์ถฉ๋์ด ๋ฐ์. (Git์ด ์๋ ค์ค) V3์ V3 ์ ๋ชจ๋ V2๋ผ๋ ๊ฐ์ ๊ธฐ์ค ์์ ์์ ์ํ
`git push`๋ฅผ ์คํํ ๋ ์ถฉ๋ ๋ฐ์. (GitHub๊ฐ ์๋ ค์ค) V3์ V3 ๋ชจ๋ V2๋ผ๋ ๊ฐ์ ๊ธฐ์ค ์์ ์์ ์ํ
Conflict ํด๊ฒฐ ๋ฐฉ๋ฒ:
1. Rebase: ์๋๋ฐฉ์ ์์ ์ ๋จผ์ ๊ฐ์ ธ์ ๋ด ์ปค๋ฐ์ ๊ทธ ์์ ๋ค์ ์๋ ๋ฐฉ๋ฒ. ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๊น๋ํ์ง๋ง ๊ธฐ์กด ์ปค๋ฐ์ด ๋ค์ ์์ฑ๋๋ ๋จ์ ์ด ์๋ค.
- ๋ ์์ ์ ๋จผ์ ์๋์ ์์ ์ ์กด์คํ๊ณ , ๊ทธ ์์ ๋ค์ ๋ด ์ปค๋ฐ์ ๋ง๋ค์ด ์์ํฉ์น๋ค.
2. Merge: ์ถฉ๋ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ ์ ์งํ๊ณ , ์ด๋ฅผ ๋ณํฉ ์ปค๋ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ. ๋ณํฉ ์ปค๋ฐ์ด ๋ง์ด ์๊ธธ ์ ์์ด ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ ๋จ์ ์ด ์๋ค.
- ๋ ์์ ์ ์ ์งํ์ฑ ํฉ์ณ์ก๋ค๋ ๊ฒ์ ์๋ฏธํ๋ Merge ์ปค๋ฐ์ ์ถ๊ฐํ์ฌ ํฉ์น๋ค.
๋ง์ฝ ๋ก์ปฌ Git ์ค์ ์์ ์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค์ ํ์ง ์์๋ค๋ฉด `git pull` ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๋ ์๋์ ๊ฐ์ ๋ฉ์ธ์ง๊ฐ ๋ํ๋๋ฉด์ Pull ์์ ์ด ์ค๋จ๋๋ค.
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before your next pull:
hint: git config pull.rebase false # merge (the default strategy)
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
์ด ๋ฉ์ธ์ง๋ ์ถฉ๋์ด ๋ฐ์ํ์ ๋ ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ง ์ค์ ํ์ง ์์์์ ์๋ฏธํ๋ค. ์ค์ ์ ๋ช ์ํ๊ฑฐ๋, ๋ช ๋ น์ด๋ฅผ ์คํํ ๋ ์ต์ ์ ๋ช ์ํ์ฌ ์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์๋ค.
Conflict ์ถฉ๋ ํด๊ฒฐ์ฑ 2๊ฐ์ง: Rebase & Merge ์๋ฆฌ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ์ฝ๊ฒ ์ดํดํ๊ธฐ
- 1. Rebase ์๋ฏธ๋ ๋ด๊ฐ ์์
ํ V3๊ฐ V2๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์์ง๋ง, ์๋์ ์์
V3๊ฐ ๋จผ์ ๊ฐ์ ธ์ ๊ทธ๊ฑธ ์ ๊ธฐ์ค์ผ๋ก ๋ด ์์
์ ๋ค์.
- Rebase๋ ์๋๋ฅผ ์กด์คํ๋ ํ๋
- 2. Merge์ ์๋ฏธ๋ ์ ๊ทธ๋ฆผ์์ ๋ด๊ฐ ์์
ํ V3์ ์๋์ ์์
V3 ๋ชจ๋ ๊ทธ๋๋ก ๋๊ณ , ์ถฉ๋๋๋ ๊ฒ์ ํด๊ฒฐํ ์๋ก์ด ๋จธ์ง ์ปค๋ฐ ์ถ๊ฐ
- Merge๋ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ฌ์ด ์๋ฃจ์ ์ด์ง๋ง, ๋จธ์ง ์ปค๋ฐ์ ํตํด ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ค.
Conflict ์ถฉ๋ ํด๊ฒฐ์ฑ 2๊ฐ์ง: Rebase & Merge ๋จ์ ์ ๊ทธ๋ฆผ์ผ๋ก ์ฝ๊ฒ ์ดํดํ๊ธฐ
- Rebase ๋จ์ : ๋ด๊ฐ ์์ ํ๋ ์ปค๋ฐ๋ค์ด ๋ค์ ์์ฑ ๋๊ธฐ์ ํ์คํ ๋ฆฌ๊ฐ ๋ฆฌ์ ๋๋ค.
- Merge ๋จ์ : ์ปค๋ฐ์ด ์ฌ๋ฌ๊ฐ ์์ฑ๋์ด์ ๋จธ์ ์๊ฐ ๋ง์์ง์ ๋ฐ๋ผ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ค.
๊ทธ๋ฆผ์ ๋ฆฌ
์ด์ด์ ๋ค์ ํฌ์คํ ์์ ์ถฉ๋ ํด๊ฒฐ์ ์ํ 4๊ฐ์ Merge ์ ๋ต(Fast-Forward, 3-Way Merge, Rebase, Squash Merge)์ ๋ํด ์์ธํ๊ฒ ๋ค๋ค ๋ณผ ์์ ์ด๋ค.
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
'๐ปDEV-STUDY > Git' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Git & GitHub #6 - ์ค๋ฌด์์์ Git ๋ธ๋์น ์ ๋ต ๋ฐ Zone ๊ตฌ๋ณ (0) | 2024.09.01 |
---|---|
Git & GitHub #5 - Git ๊ตฌ์กฐ ๋ฐ ๋ช ๋ น์ด & Git ํธ๋ฌ๋ธ ์ํ (2) | 2024.09.01 |
Git & GitHub #4 - Conflict ์ถฉ๋ ํด๊ฒฐ (0) | 2024.09.01 |
Git & GitHub #2 - Git ์์๊ณผ Local/Remote Branch ๊ด๋ฆฌ (1) | 2024.09.01 |
Git & GitHub #1 - ๊ฐ๋ ๋ฐ SSH ํค ์์ฑ (0) | 2024.08.31 |