1. Branch ์ฌ์ฉํ๊ธฐ1.1 ๊ธฐ๋ณธ ๋ธ๋์น(main, master)2. Branch ์ด๋/๋ณ๊ฒฝ, ํ์ผ ๋ณต์ํ๊ธฐ2.1. checkout2.2. switch2.3. restore3. Branch ์ญ์ /๋ณต๊ตฌํ๊ธฐ3.1. branch ์ญ์ 3.2. branch ๋ณต๊ตฌ4. merge(ํฉ๋ณ)ํ๊ธฐ5. conflict (์ถฉ๋)5.1 VSC์์ conflict (์ถฉ๋) ํด๊ฒฐํ๊ธฐ5.2 conflict ์ค์ต ์ ์ฒด ์ฝ๋
1. Branch ์ฌ์ฉํ๊ธฐ
๊ฐ๋ฐ ์์
์ ํ ๋, ๊ฐ๋ฐ์๋ค์ ์์
๋ ํ์งํ ๋ฆฌ์์ ์์ค ์ฝ๋๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ฐ๊ด์ฑ์ด ์๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ค๊ณ ํ ๋ ์ด๋ค ๊ฐ๋ฐ์๋ A ๊ธฐ๋ฅ์ ์์
ํ๊ณ ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ B ๊ธฐ๋ฅ์ ๋งก์ ์์
ํ๋ค๊ณ ๊ฐ์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ง์ฝ A ์์
์ด ๋ค ๋๋ ๋ค์ B ์์
์ ์ํํ๋ค๋ฉด ์ฐ๊ด์ฑ์ด ์๋ ๊ธฐ๋ฅ ๋จ์์ ์์
์ ๋นํจ์จ์ ์ผ๋ก ํ๊ณ ์๋ ๊ฒ์
๋๋ค. ๋ณ๋๋ก ์์
ํ์ฌ ํฉ์น๋ ๋ฐฉ์์ด ๊ฐ์ฅ ์ข์ ๊ฒ์
๋๋ค. Git์์๋ ๋ธ๋์น์ ๋จธ์ง๋ผ๋ ๋ช
๋ น์ผ๋ก ์ด๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๋ธ๋์น๋ ๋
๋ฆฝ์ ์ธ ์์
์ ํ ์ ์๋ ๊ณต๊ฐ์
๋๋ค. A ๊ธฐ๋ฅ์ A ๋ธ๋์น์์ ์์
ํ๊ณ , B ๊ธฐ๋ฅ์ B ๋ธ๋์น์์ ์์
ํ๋ฉด, ์๋ก ๋ค๋ฅธ ๋
๋ฆฝ์ ์ธ ๊ณต๊ฐ์์ ์์
ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ก์๊ฒ ์ํฅ์ ์ฃผ์ง ์๊ณ ์์
ํ ์ ์์ต๋๋ค. ๋ฉ์ธ ์์
๊ณต๊ฐ์ ์ฝ๋๋ฅผ ๋ณต์ฌํ ๊ฐ๋ณ์ ์ธ ์์
๊ณต๊ฐ์ ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ ๊ฐ๊ฐ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์งํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์
์ด ์๋ฃ๋์์ ๋, ์ฝ๋๋ฅผ ํฉ์น๋ฉด ๋ ๊ฒ์
๋๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ๋ฆฌ๋ ๊ธฐ๋ณธ ๋ธ๋์น์์ ์์
์ค์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฆฌ1, ๊ฐ๋ฆฌ2, ๊ฐ๋ฆฌ3 ์ด๋ผ๋ ์ปค๋ฐ์ ๋จ๊ธฐ๊ณ ์์ต๋๋ค. ๋นํค๋ ๊ฐ๋ฆฌ์ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๋ คํฉ๋๋ค. ๊ฐ๋ฆฌ๊ฐ ์์
์ํ๋ ๋ด์ญ์ ๊ธฐ๋ณธ๋ธ๋์น์์ pull๋ฐ๊ณ ๊ฐ๋ฆฌ3์ ์ปค๋ฐํ ๋ถ๋ถ์์ ์์
๊ณต๊ฐ์ ๊ธฐ๋ฅ ๋ธ๋์น๋ก ๋ถ๋ฆฌํฉ๋๋ค. ๋นํค๋ ์ด์ ๋ถ๋ฆฌ๋ ์์
๊ณต๊ฐ(๊ธฐ๋ฅ ๋ธ๋์น)์์ ์์ ์ ์ปค๋ฐ์ ๋จ๊ธฐ๋ฉฐ ์์
์ ๋
๋ฆฝ์ ์ผ๋ก ์งํํฉ๋๋ค.
ย
๊ฐ๋ฐ์๋ ๊ธฐ๋ฅ ๋ธ๋์น์์ ์์
ํ ๋ด์ฉ์ ๊ธฐ๋ณธ ๋ธ๋์น๋ก ๋ฐ๋ก ์ปค๋ฐ์ ๋ ๋ฆด ์ ์๊ณ ์ฝ๋๋ฅผ ๋ณํฉ(merge)ํ๊ณ ์
๋ฐ์ดํธ ํ ์ ์์ต๋๋ค. ๋ธ๋์น๋ก ์์
์ ํ๋ฉด ๋ธ๋์น ๋จ์๋ก ์
๋ฐ์ดํธ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ถฉ๋์ด ์ผ์ด๋๋ ์ผ์ ๋ฐฉ์งํ๊ธฐ ์ข์ต๋๋ค.
๋ง์ฝ ์๋ก ๊ฐ์ ๋ถ๋ถ์ ๋ค๋ฅด๊ฒ ์์ ํ์ฌ ํฉ์น๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ถฉ๋์ด ๋ฉ๋๋ค! ์ถฉ๋์ด ๋๋ฉด ๋ ์ค ํ๋๋ฅผ ์ ํํ๋ผ๋ ์ ํ์ด ๋จ์ฃ . ๊ฑฑ์ ํ์ง ์์ผ์
๋ ๋ฉ๋๋ค. ๋๋๋ฆด ์๋ ์์ผ๋๊น์.
ย
git์์์ ๊ธฐ๋ณธ ๋ธ๋์น๋ master ๋ธ๋์น(GitHub์ main) ์
๋๋ค. ๊ธฐ๋ณธ๋ธ๋์น๋ git ์ ์ฅ์๋ฅผ ์ด๊ธฐํํ ๋ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋๋ค. ์ด๋, 'HEAD'๋ผ๋ ํน์ํ ํฌ์ธํฐ๊ฐ ์์ต๋๋ค. ์ด ํฌ์ธํฐ๋ ์ง๊ธ ์์
์ค์ธ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
ย
ํด๋น ์ฑ
์์ ๋์ค๋ ์์์์ main ๋ธ๋์น ๋๋ master ๋ธ๋์น๋ ๊ธฐ๋ณธ ๋ธ๋์น๋ฅผ ์๋ฏธํฉ๋๋ค. master๋ผ๋ ๋จ์ด๊ฐ ๋
ธ์์ ๋ฅผ ๋ ์ฌ๋ฆฌ๊ฒ ํ๋ค๋ ์ด์ ๋ก ๋ง์ ์ฝ๋์์ master ๋์ main์ ์ฑํํ๊ณ ์์ต๋๋ค.
git config --global init.defaultBranch main
๋ช
๋ น์ ํตํด git์์๋ GitHub์ฒ๋ผ ๊ธฐ๋ณธ ๋ธ๋์น๋ฅผ main์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ย
ํ๋์ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด ํน์ ๋ธ๋์น์ ๋ด์ฉ๋ค์ main ๋ธ๋์น์ ํฉ์นฉ๋๋ค. ๋ ์๋ก์ด ์์
์ ํ๋ ค๊ณ ํ๋ฉด main ๋ธ๋์น์์ ๋ค์ ์๋ก์ด feature ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์์
ํฉ๋๋ค.
ย
ํน์ ๊ธฐ๋ฅ์ ์์
ํ๊ณ ์๋๋ฐ ๊ธํ๊ฒ ๋ฒ๊ทธ๋ฅผ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ํ์ฌ์ ์์
์ํ๋ฅผ ์์๋ก ์ปค๋ฐํด๋๊ณ ์ด์ ๊ธฐ๋ฅ ์์
์ค์ธ ์ํ๋ก ๋ธ๋์น(์์
ํด๋)๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ฒ๊ทธ ํจ์น์ฉ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์์ ์์
์ ํฉ๋๋ค. ์ดํ ์์
์ด ์๋ฃ๋๋ฉด ๋ฒ๊ทธ ํจ์น์ฉ ๋ธ๋์น์ ์ถ๊ฐ๋ ๋ณ๊ฒฝ ๋ด์ญ์ main ๋ธ๋์น์ ํฉ์น ์ ์์ต๋๋ค. ์ด๋ฐ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด main ๋ธ๋์น๋ ๊ฐ์ฅ ์ต๊ทผ์ ๋ฐฐํฌํ ์์ค์ฝ๋์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ณ ์๊ฒ ๋ฉ๋๋ค.
ย
์ง๊ธ๋ถํฐ ๋ธ๋์น ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
- ํ์ฌ ๋ธ๋์น ๋ชฉ๋ก๊ณผ ํ์ฌ ๋ธ๋์น ํ์ธ
$ git branch
ย
ย
๊ฐ๋ฆฌ1, ๊ฐ๋ฆฌ 2, ๊ฐ๋ฆฌ 3, ๊ฐ๋ฆฌ 4๋ ์ปค๋ฐ ๋ฉ์์ง์
๋๋ค. ๊ฐ๋ฆฌ 4๊ฐ ๋ด๊ณ ์๋ ๋ด์ฉ์ด ๊ฐ์ฅ ์ต์ ์ ์ํ๋ผ๊ณ ํ ์ ์๊ฒ ์ต๋๋ค. HEAD ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ธ๋์น๊ฐ main์ด๊ธฐ ๋๋ฌธ์
$ git branch
๋ฅผ ํ๋ฉด * main
๊ฐ ์ถ๋ ฅ ๋ฉ๋๋ค.ย
- branch ๋ง๋ค๊ธฐ ๋ธ๋์น๋ฅผ ํ์ฌ ์์ ์ ๋ง๋ค ์ ์์ต๋๋ค. Gary ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ๋ด ์๋ค.
$ git branch Gary
$ git branch Gary main #์ด๋ ๊ฒ ์ ๋ ฅํ ๊ฒฝ์ฐ main์์ ํ์๋๋ ๋ธ๋์น๋ฅผ ๋ง๋ญ๋๋ค.
ย
1.1 ๊ธฐ๋ณธ ๋ธ๋์น(main, master)
์์์ ์ธ๊ธํ๋ฏ, git์์์ ๊ธฐ๋ณธ ๋ธ๋์น๋ master์ด๊ณ GitHub์์์ ๊ธฐ๋ณธ ๋ธ๋์น๋ main์
๋๋ค.
git init
๋ช
๋ น์ ํตํด ์ด๊ธฐํํ๊ณ ๋ ํฌ์งํ ๋ฆฌ์ ์ฐ๊ฒฐํ๋ ๊ณผ์ (ํด๋น ์ฑํฐ์์ ์งํํ๋ ๊ณผ์ )์ ์งํํ๊ฒ ๋๋ฉด ๊ธฐ๋ณธ ๋ธ๋์น๋ master๊ฐ ๋ฉ๋๋ค. ์์ ์ธ๊ธ๋ ๋ช
๋ น์ด git config --global init.defaultBranch main
๋ก ์ค์น ์ ๋๋ ์ค์น ํ ์ค์ ์ ํตํด ๊ธฐ๋ณธ ๋ธ๋์น ์ด๋ฆ์ ๋ฐ๊ฟ ์๋ ์์ต๋๋ค.
๊นํ๋ธ์์ ์ ๊ณตํ๋ ์ด๊ธฐํ ์ค์ ์ ์ฌ์ฉํ๊ฑฐ๋ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ผ ์งํํ๋ค๋ฉด ๊ธฐ๋ณธ ๋ธ๋์น๊ฐ main์ด ๋ฉ๋๋ค.ย
2. Branch ์ด๋/๋ณ๊ฒฝ, ํ์ผ ๋ณต์ํ๊ธฐ
2.1. checkout
checkout์ ๋ธ๋์น ๋ณ๊ฒฝ ๋๋ ์์
ํธ๋ฆฌ ํ์ผ ๋ณต์์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ๊ธฐ์กด์ checkout์ด ๊ฐ์ง ๊ธฐ๋ฅ์ด ๋๋ฌด ๋ง์์ต๋๋ค. ๋๋ฌธ์ Git 2.23์์ checkout์ ๋์ ํด switch์ restore๊ฐ ๋์
๋์์ต๋๋ค.
ย
checkout์ ํตํด ๋ธ๋์น๋ฅผ ์ด๋ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํธํ
์ฒดํฌ์์์ ์๊ฐํ์
์ ๋ธ๋์น๋ฅผ ๋ ๋๋ค๊ณ ์๊ฐํ๋ฉด ์๋ฉ๋๋ค. ์ฌ์ฉํ ๋ธ๋์น๋ฅผ ์ง์ ํ๋ ๊ฒ์ด checkout์
๋๋ค. checkout์ ์ฌ์ฉํด Gary ๋ธ๋์น๋ก ์ด๋ํด๋ด
์๋ค.
$ git checkout Gary
ย
ย
์๋ก์ด ๋ด์ฉ์ ์ถ๊ฐํ๊ณ ์ปค๋ฐํด๋ด
์๋ค.
$ echo 'hello branch' >> branch.txt $ git status $ git add branch.txt $ git commit -m "๊ฐ๋ฆฌ 5"
ย
ย
์๋๋ฐฉ์ด ์๊ฒฉ ์ ์ฅ์์์ pull์ ๋ฐ์ต๋๋ค.
$ git pull
ย
ย
์๋๋ฐฉ์ด ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ปค๋ฐ์ ํ ๊ฒฝ์ฐ์
๋๋ค.
$ git checkout main $ git branch binky $ git checkout binky $ git commit -m "๋นํค 1"
ย
git log --all --decorate --oneline --graph
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ์ปด๋ฐ์ ๊ทธ๋ํ๋ก ๋ณผ ์ ์์ต๋๋ค.ย
push๋ฅผ ํ ๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ฌ๊ฐ ๋ฌ๋ค๋ฉด ์๋ ๋ช
๋ น์ด๋ฅผ ๊ทธ๋๋ก ์
๋ ฅํด์ฃผ์ธ์.
ย
git push๋ฅผ ํ๋ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ upstream ๋ธ๋์น๋ฅผ ์ค์ ํ์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์
git push --set-upstream origin branch_name
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ํด๋น ๋ช
๋ น์ด ์ดํ๋ถํฐ๋ ์๊ฒฉ ์ ์ฅ์์ Binky์ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด push ํ๊ฒ ๋ค๋ ๋ป์
๋๋ค.ย
git push
vs git push <์๊ฒฉ์ ์ฅ์๋ช
> <๋ธ๋์น๋ช
>
์ git push origin main
์ผ๊น์? ๊ทธ๋ฅ git push
ํ๋ฉด ์๋๋์? ๋ผ๊ณ ์๊ฐํ์ค ์๋ ์์ต๋๋ค.git push <์๊ฒฉ์ ์ฅ์๋ช
> <๋ธ๋์น๋ช
>
๋ ์ด๋ ์๊ฒฉ ์ ์ฅ์์ ์ด๋ ๋ธ๋์น์ pushํ ์ง ์ ๋ฌํฉ๋๋ค. git push
๋ ํ ๋์๋ ์ด๋ฏธ ์ฐ๊ฒฐ๋ ๊ณณ์ pushํ ์ ์์ง๋ง, ์๊ฒฉ ์ ์ฅ์์ ํด๋น ๋ธ๋์น๊ฐ ์๋ ๊ฒฝ์ฐ์๋ git push -u origin <๋ธ๋์น๋ช
>
์ ์คํํด์ฃผ์
์ผ ์ดํ์ ๊ฐ๋จํ pushํ ์ ์์ต๋๋ค. -u
์ต์
์ด --set-upstream
์
๋๋ค.- ์ฌ๊ธฐ์ origin์ ํค์๋๊ฐ ์๋๋๋ค. one, two๋ฑ์ ์ด๋ฆ์ผ๋ก ํ ์ ์์ด์. ์ด๋ ์ฌ๋ฌ ์๊ฒฉ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์ ๋ด์ฉ์ ์ด์ด main์ด ์ด๋ ์๊ฒฉ ์ ์ฅ์(GitHub์ธ์ง GitLab์ธ์ง ๋๋ ๊ทธ ์ธ์ธ์ง)์ main์ธ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ค์ ํด์ฃผ๋ ์ค์ ์ ๋๋ค.
ย
2.2. switch
๋ธ๋์น๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
$ git switch Gary
ย
๋ธ๋์น๋ฅผ ์๋ก ๋ง๋ค์ด์ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค.
$ git switch -c Gary
ย
2.3. restore
restore
๋ ํ์ผ์ ์์ ๋ด์ฉ ๋ณต์๊ณผ add
๋ฅผ ํตํด ์คํ
์ด์ง์ ์ฌ๋ฆฐ ํ์ผ์ ๋นผ๋ผ ๋ ์ฌ์ฉํฉ๋๋ค.ย
์ฐ์ ํ์ผ์ ์์ฑํ ํ ์ปค๋ฐ์ ํฉ๋๋ค.
$ touch README.md $ vi README.md //i->์์ฑ ํ->Esc->:wq $ git add . $ git commit -m "add file" $ git status
ย
์ดํ ํด๋น ํ์ผ์ ์์ ํ ํ์ ์ ์ฅ์ ํ๊ณ ์ํ๋ฅผ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์๋ ์์๋๋ก ์งํํ์๋ฉด ๋ฉ๋๋ค.
1) ์๋์ ๋ช
๋ น์ด ์
๋ ฅ
$ vi README.md
2) ์๋ ์์์ ๋ฐ๋ผ ์์ฐจ์ ์ผ๋ก ํธ์ง
i -> ์์ ํ -> Esc -> :wq
ย
modified ํ์ผ์ด ์๋ค๊ณ ๋์จ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
ย
์ด๋, ํ์ผ ๋ณ๊ฒฝ ๋ด์ญ์ modified ํ์ผ์์ unmodified ํ์ผ๋ก ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
ย
1) restore์ ์ด์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆฌ๊ธฐ
$ git restore README.md
ย
2) checkout์ ์ด์ฉํ์ฌ ํ์ผ ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋๋ฆฌ๊ธฐ
git checkoutโ-- filename
ย ์ ํด๋น ํ์ผ ๋ด์ฉ์ด ์ต์ ์ปค๋ฐ ์ ์ผ๋ก ๋์๊ฐ๋๋ก ํฉ๋๋ค. ์ด๋, checkout์ผ๋ก ์ง์์ง ๋ด์ฉ์ ์ปค๋ฐ์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ค์ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.$ git checkout -- README.md
ย
modified ํ์ผ์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
ย
ํ์ผ์ ์ด์ด ํ์ธํ ๊ฒฐ๊ณผ์
๋๋ค.
hello world Byebye
hello world
ย
์คํ
์ด์ง ์ฌ๋ฆฐ ๊ฒ์ ๋นผ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
$ git add . $ git status
ย
1) restore ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๋นผ๊ธฐ
$ git restore --staged README.md
ย
2) reset ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๋นผ๊ธฐ
$ git reset HEAD README.md
ย
์ํ๋ฅผ ํ์ธํด ๋ณด๋ฉด ์คํ
์ด์ง์ ์ฌ๋ผ๊ฐ ์์ง ์์ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ย
3. Branch ์ญ์ /๋ณต๊ตฌํ๊ธฐ
3.1. branch ์ญ์
ํน์ ๋ธ๋์น๋ฅผ ์ญ์ ํ๋ ๋ช
๋ น์ด ์
๋๋ค.
$ git branch -D <์ญ์ ํ ๋ธ๋์น๋ช >
ย
Gary ๋ธ๋์น๋ฅผ
git branch -D Gary
๋ช
๋ น์ด๋ก ์ญ์ ํด๋ณด๊ฒ ์ต๋๋ค.ย
์ญ์ ํ ๋ค,
git branch
๋ช
๋ น์ด๋ฅผ ํตํ์ฌ ์ ๋๋ก ์ญ์ ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ธ๋์น ๋ชฉ๋ก์ main๋ง ์์ผ๋ฏ๋ก Gary ๋ธ๋์น๊ฐ ์ญ์ ๋์์์ ์ ์ ์์ต๋๋ค.3.2. branch ๋ณต๊ตฌ
์ญ์ ํ ๋ธ๋์น๋ฅผ ๋ณต๊ตฌํ๋ ๊ฒ์ 2๋จ๊ณ๋ก ๋๋ ์ ์งํํ ์ ์์ต๋๋ค.
ย
1๋จ๊ณ. git reflog๋ก ๋ณต๊ตฌ ์์ ํ์ธ
๋จผ์ , ์ญ์ ํ ๋ธ๋์น๋ฅผ ์ด๋ค ์์ ์ผ๋ก ๋ณต๊ตฌํ ๊ฒ์ธ์ง ์์์ผ๊ฒ ์ฃ . ์ญ์ ํ ๋ธ๋์น๊ฐ ๋จ๊ฒผ์๋ ์ปค๋ฐ ์ค ์ด๋ค ์ํ๋ก ๋์๊ฐ ์ง๋ฅผ ์ฐพ์์ ์ปค๋ฐ ํด์๊ฐ์ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์ ๋ชจ๋ ์ฐธ์กฐ ๋ชฉ๋ก์ ํ์ธ ํ ์ ์๋
git reflog
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํฉ๋๋ค.$ git reflog
ย
reflog๋ ๋ชจ๋ ์ฐธ์กฐ ๋ด์ญ๋ค์ ๋ปํฉ๋๋ค. main ๋ธ๋์น์์ ์ด๋ค ๋ธ๋์น๋ก ์ฐธ์กฐ๋ฅผ ํ๋์ง, ์ด๋ค ์ปค๋ฐ์ ๋ ๋ ธ๋์ง ๋ฑ ๋ชจ๋ ๋ด์ญ๋ค์
git reflog
๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค. ย
Gary ๋ธ๋์น๋ฅผ
git branch -D Gary
๋ช
๋ น์ด๋ก ์ญ์ ํ ๋ค, ๋ณต๊ตฌ ์์ผ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.ย
git reflog
๋ฅผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฐธ์กฐ ๋ชฉ๋ก๋ค์ ํ์ธ ํ ์ ์์ต๋๋ค. Gary ๋ธ๋์น๊ฐ Gary- 1 ๋ฒ์งธ ์ปค๋ฐ
์ปค๋ฐ ๋ฉ์์ง๋ฅผ ๋ ๋ ธ๋ ์์ ์ผ๋ก ๋ณต๊ตฌํ๊ธฐ ์ํด ํด๋น ์ปค๋ฐ ๋ฉ์์ง๋ฅผ HEAD๊ฐ ๊ฐ๋ฆฌํจ ์์ ์ ํด์ ๊ฐ์ ์ฐพ์ต๋๋ค.ย
2๋จ๊ณ. git checkout์ผ๋ก ๋ธ๋์น ๋ณต๊ตฌ
๋ธ๋์น๋ฅผ ๋ณต๊ตฌํ๋ ๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ git checkout -b <์ญ์ ํ ๋ธ๋์น๋ช > <์ปค๋ฐ ํด์๊ฐ>
ย
git reflog๋ก ์ญ์ ํ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ ํด์๊ฐ์ ํ์ธํ ๋ค, ์ด๋ฅผ ์ด์ฉํด์ ๋ธ๋์น๋ฅผ ๋ณต๊ตฌ์ํฌ ์ ์์ต๋๋ค.
ย
์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด Gary ๋ธ๋์น๋ก ์์น๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
4. merge(ํฉ๋ณ)ํ๊ธฐ
ย
๋ branch๋ก ๋๋์ด ์์
ํ๋ ๊ฒ์ ๋ณํฉํ๋ ๋ช
๋ น์ด์
๋๋ค.
$ git checkout main $ git log $ git merge binky $ git log
ย
merge๊ฐ ์๋ฃ๋์์ผ๋ฉด push ๊น์ง ํด์ฃผ์
์ผ ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์์ด ๋ฉ๋๋ค.
$ git push origin main
ย
ย
์์ binky ๋ธ๋์น๋ฅผ mergeํ ํ์ gary์ ๋ธ๋์น๋ฅผ mergeํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ง์ฝ, ๋ ๋ธ๋์น๊ฐ ๊ฐ์ ๊ณณ์ ์์ ํ๋ค๋ฉด ์ถฉ๋์ด ์ผ์ด๋์ง๋ง ์ง๊ธ์ ๋ค๋ฅธ ๊ณณ์ ์์ ํ๋ค๋ ๊ฐ์ ํ์ ์งํํ๋๋ก ํ๊ฒ ์ต๋๋ค.
$ git merge Gary $ git push origin main
ย
ย
5. conflict (์ถฉ๋)
๊ฐ๋ฆฌ ๋ธ๋์น์ main ๋ธ๋์น ๋ ๋ค README.md์์ ์์
์ ํ๋๋ฐ ์๋ก ๋ณ๊ฒฝ ๋ด์ญ์ด ๋ค๋ฅด๋ค๊ณ ๊ฐ์ ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋, ๊ฐ๋ฆฌ ๋ธ๋์น์ main ๋ธ๋์น์ ์์
๋ด์ญ์
๋๋ค.
hello world hello Gary
hello world hello binky
mergeํ ๋ ๋ ๋ธ๋์น๊ฐ ๊ฐ์ ๊ณณ์ ์์ ํ๋ค๋ฉด ์ถฉ๋์ด ์ผ์ด๋ฉ๋๋ค. ์ด๋ ์ถฉ๋๋ ์์ ์ ์ฐพ์ ์๋์ผ๋ก ๊ณ ์ณ์ฃผ์ด์ผ ํฉ๋๋ค.
<<<<<<< HEAD (Current Change) hello world hello binky ======= >>>>>>> branchName (Incoming Change) hello world hello Gary
ย
conflict๋ ๋๊ฐ์ง ๋ณ๊ฒฝ ๋ด์ญ์ ๋น๊ตํ ๋ค์์ ์ํ๋ ์ฝ๋๋ฅผ ๋จ๊ธฐ๋ ๊ฒ์
๋๋ค.
hello world hello binky Gary
ย
์ดํ add > commit > push ๋ฅผ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
ย
5.1 VSC์์ conflict (์ถฉ๋) ํด๊ฒฐํ๊ธฐ
visual studio code์์๋ ์ถฉ๋์ ๋ํด ์ข ๋ ์๋ํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋์ ๊ฐ์ด ์ถฉ๋์ด ๋ฌ์ ๋ ํ์ฌ ์ฝ๋๋ฅผ ์ ์งํ ์ง, ๋จธ์ง๋ ์ฝ๋๋ฅผ ๋ฐ์ํ ์ง ํด๋ฆญ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
5.2 conflict ์ค์ต ์ ์ฒด ์ฝ๋
- ๋ฌธ์
main branch : -readme ํ์ผ 'hello world' a branch : - readme ํ์ผ 'hello a' ์์ - aํด๋ > a.txt(hello1) ์์ฑ b branch : - readme ํ์ผ 'hello b' ์์ - bํด๋ > b.txt(hello2) ์์ฑ 2๊ฐ๋ฅผ merge, ์ถฉ๋ ํด๊ฒฐ
- ๋ช ๋ น์ด
########## master branch ########## git init echo 'hello world' >> README.md git add . git commit -m '1' git branch a git branch b ########## a branch ########## git checkout a # ๋ฉ๋ชจ์ฅ์ผ๋ก hello a๋ก ์์ ํ ์ ์ฅ mkdir a cd a touch a.txt cd .. git add . git commit -m '2' ########## b branch ########## git checkout b # ๋ฉ๋ชจ์ฅ์ผ๋ก hello b๋ก ์์ ํ ์ ์ฅ mkdir b cd b touch b.txt cd .. git add . git commit -m '3' ########## master branch ########## git checkout master git merge a git merge b # ์ถฉ๋ ๋ฐ์, VSC์์ ํด๊ฒฐํด๋ณด์ธ์.
VSC์์ git bash ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ๋ํดํธ๋ก ์ค์ ํ๊ธฐ
Window VSC์์ Ctrl + Shift + P Mac VSC์์ cmd + shift p Select Default Profile ์ ๋ ฅ ํ ์ ํ Git Bash ์ ํ
+
๋ฒํผ์ ํด๋ฆญํ์ฌ git bash๋ก ์ด๊ธฐ
ย