Git & Github ์ค๋ฌด ํ์ฉ ์๋ฒฝ ๊ฐ์ด๋ part2. (๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ)
์ด์ part1์์๋ ๊น์ ๊ธฐ๋ณธ์ ์ธ ์๊ฐ์ add๋ก ์คํ ์ด์ง ์ฌ๋ฆฌ๊ณ ์ปค๋ฐํ๋ ๋ฑ์ ๊ธฐ์ด ๋ช ๋ น์ด๋ฅผ ๋ค๋ฃจ์๋ค.
์ด๋ฒ ๋ด์ฉ์์๋
์น์ 6 : ๋ธ๋์น๋ก ์์ ํ๊ธฐ
์น์ 7 : ๋ธ๋ฐ์น ๋ณํฉํ๊ธฐ
๋ธ๋์น ์์ฑ ๋ฐ ๋ณํฉ๊ณผ ์ถฉ๋์ ๋ํด ์ ๋ฆฌํด๋ณด์๋ค.
์น์ 6 : ๋ธ๋์น๋ก ์์ ํ๊ธฐ
๋ธ๋์น๋?
- ์ด๋ ๊ฒ ์ปค๋ฐ์ด ์์ฐจ์ ์ด๋ผ๋ฉด ์ด๋ค ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋กค๋ฐฑํ๊ณ ์์ ํ๋ ๋ฑ์ ์์ ์ด ๋ค๋ฅธ ์์ ๊ณผ ์ถฉ๋ํ์ฌ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
- ๋ฐ๋ผ์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ๋ ๊ฒ์ด ํ์ํ๋ค. ์ผ๋ถ ์์ ๋ค์ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๋ง์ณ๋ฒ๋ฆด ์ ์๋ค.
- ๊ทธ๋์ ๋ธ๋์น๊ฐ ํ์ํ๋ฉฐ ๊น ๋ธ๋์น๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ๊ณ ํฉ์น๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
โ๏ธ ๋ธ๋์น๋ ๊น์ ๊ฐ์ฅ ํน์ง์ ์ธ ๊ธฐ๋ฅ์ด๋ฉฐ ํ๋ก์ ํธ์์ ์ผ์ข
์ ํ์๋ผ์ธ ๊ฐ์ ๊ฒ์ด๋ค.
โ๏ธ ํ ๋ธ๋์น์์ ์์
ํ ๋ด์ฉ์ ๋ค๋ฅธ ๋ธ๋์น์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋
๋ฆฝ์ ์ด๋ค.
๋ง์คํฐ ๋ธ๋์น
master ๋ธ๋์น.
์ ์ ์ฅ์๋ฅผ ๋ง๋ค์์ ๋ ์๊ธฐ๋ ๊ธฐ๋ณธ ๋ธ๋์น ์ด๋ฆ์ผ๋ก git init ๋ช ๋ น์ ์คํํ์ ๋ ์๋์ ์ผ๋ก ์์ํ๋ ๋ธ๋์น๊ฐ ๋ฐ๋ก master์ด๋ค.
userpc@DESKTOP-UQ5OHLV MINGW64 ~/Downloads/git_study/test (master)
$ git status
On branch master
nothing to commit, working tree clean
๋ณดํต ๋ง์คํฐ ๋ธ๋์น๋ฅผ ๊ณต์์ ์ธ ์์ ์ฝ๋ ๋ฒ ์ด์ค๋ก ์ทจ๊ธํ๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ธ๋์น์์ ์์ ํ๊ณ ์ปค๋ฐํด์ ํ ์คํธํด์ ๋ง์ฝ ์ ๋๋ก ์๋ํ๋ฉด ๋ง์คํฐ๋ก ๋์์ ๊ทธ๊ฒ๋ค์ ๊ฒฐํฉํ๋ค.
++ 2020๋ ๊นํ์์ ๊ธฐ๋ณธ ๋ธ๋์น๋ช ์ master → main์ผ๋ก ๋ณ๊ฒฝํ๋ค๊ณ ํ์ผ๋ ์ด๋ ๊นํ์์๋ง ์ ์ฉ๋๋ฉฐ ์ค์ ๋ก์ปฌ ๊น์์๋ ์ฌ์ ํ ๋ง์คํฐ๋ก ํ๊ธฐ๋์ด ์๋ค.
HEAD
๋ธ๋์น ์์ฑ์ ๋ํด ์์๋ณด๊ธฐ ์ ์ ์์์ผํ ๊ฐ๋ ํ๊ฐ์ง. ๋ฐ๋ก HEAD์ด๋ค.
git log์์ HEAD -> master ๋ก ํ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค
ํค๋๋ ๊น ์ฉ์ด ์ค ํ๋๋ก ์ ์ฅ์์์ ํ์ฌ ์ฐ๋ฆฌ์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ฉฐ ๋ธ๋์น ๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
ํค๋๋ ์ฐ๋ฆฌ๊ฐ ๋ณด๊ฑฐ๋ ํ์ธํ๊ณ ์๋ ํ์ฌ ์์น๋ฅผ ๋งํ๋ ๊ฒ์ผ๋ก, ์ธ์ ๋ master ๋ธ๋์น์์ ๊ฐ์ฅ ์ต๊ทผ์ ์ปค๋ฐํ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
ํค๋๋ ๋ธ๋์น ํฌ์ธํฐ์ ๋ํ ๋ ํผ๋ฐ์ค ํฌ์ธํฐ์ด๊ณ ๋ธ๋์น ํฌ์ธํฐ๋ ํ์ฌ ๋ธ๋์น๊ฐ ์๋ ์์น์ด๋ค. ์ฑ ์ ๋ถ๋งํฌ์ ๊ฐ๋ค.
๋ง์คํฐ ๋ธ๋์น์์ Fitz, Ethel ๋ธ๋์น๋ก ์ฎ๊ธฐ๊ฒ ๋๋ฉด ํด๋น ๋ธ๋์น์ ํค๋๋ ๊ฐ์ฅ ์ต๊ทผ-๋ง์ง๋ง์ ์ปค๋ฐํ ๊ณณ์ด ํค๋๊ฐ ๋๋ค.
Git Branch
git branch : ํด๋น ์ ์ฅ์์ ๋ธ๋์น๋ค์ ํ์ธํ๋ ๋ช ๋ น์ด. ํ์ฌ ์กด์ฌํ๋ ๋ธ๋์น ๋ชฉ๋ก๋ง ๋ณด์ฌ์ค๋ค
ํ์ฌ๋ ๋ธ๋์น๊ฐ ๋ง์คํฐ ํ๋๋ง ์์ผ๋ฉฐ, ํ์ฌ ์์นํ ๋ธ๋์น ์ผ์ชฝ์ *๋ก ํ์ํด์ค๋ค
๋ธ๋์น ์์ฑ ๋ฐ ์ ํ
๐ธ git branch <branch-name> : ์ ๋ธ๋์น๋ฅผ ์์ฑํ๋ค. ๋ธ๋์น ์ด๋ฆ์ ๊ณต๋ฐฑ์ ํฌํจํด์ ์๋๋ค.
๐ธ git switch <branch-name> : ๋ธ๋์น ์ด๋.
์๋ก ์์ฑํ ๋ธ๋์น์์ ์ปค๋ฐํ ๋ด์ฉ๋ค์ master ๋ธ๋์น์ ์ ์ฉ๋์ง ์๊ณ ๋ ๋ฆฝ์ ์ด๋ค
Git Checkout vs Git Switch
๐ธ git checkout <branch-name> : git switch <branch-name> ๋ช ๋ น๊ณผ ๋์ผํ ์์ ์ ์ํํ๋ค. ๋ธ๋์น ์ด๋ฆ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ์์ ํธ๋ฆฌ๋ฅผ ๋ณต์ํ๊ธฐ ์ํด ์ด ๋ช ๋ น์ ์ฌ์ฉํ ์ ์๋ค.
๐ธ git switch -c <branch-name> : ๋ธ๋์น๋ฅผ ์ด๋ํ๋ ค๋ฉด ๋จผ์ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ผํ์ง๋ง -c ์ต๋ จ์ ํตํด ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ด๋ํ๋ ์์ ์ ํ๋ฒ์ ํ ์ ์๋ค. -c ์ต์ ์ ๋ฃ์ง ์๊ณ ๋ธ๋์น๋ฅผ ์์ฑ ๋ฐ ์ด๋ํ๋ ค๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ต์ ์ ์ฃผ์ํ ๊ฒ.
git checkout -b <branch-name> ํด๋น ๋ช ๋ น์ด๋ ๋ธ๋์น ์์ฑ ๋ฐ ์ด๋๊ณผ ๊ฐ์ ๋์์ ์ํํ๋ค.
์คํ ์ด์ง๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ์ผ๋ก ๋ธ๋์น ์ ํํ๊ธฐ?
๋์ผํ ํ์ผ์ ๋ํด ์์ ํ๊ณ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋ํ๋ ค๋ฉด -
๋ธ๋์น๋ฅผ ์ด๋ํ๊ธฐ ์ ์ ์ปค๋ฐ์ด๋ ์คํ์ํ๋ผ๊ณ ์๋ฌ๊ฐ ๋ฌ๋ค. ์ฆ ์ปค๋ฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋ํ๋ ค๊ณ ํ๋ฉด ์ฌ๋ผ์ง ๊ฒ์ด๋ผ๊ณ ๊ฒฝ๊ณ ํ๊ณ ์๋ค.
ํ์ง๋ง ๋์ผํ ํ์ผ์ด ์๋ ์๋ก์ด ํ์ผ์ ์์ฑํ ๋ค ๋ธ๋์น๋ฅผ ์ด๋ํ๋ฉด - ์์ ๊ฐ์ ์๋ฌ๊ฐ ๋จ์ง ์๊ณ ์ถ์ ๋์ง ์์ ํ์ผ์ด ์๊ณ ์ปค๋ฐํ์ง ์์๋ค๊ณ ๋ฌ๋ค.
๋ธ๋์น ์ญ์ ๋ฐ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ
๐ธ git branch -d <branch-name> : ๋ธ๋์น ์ญ์ . ๋ธ๋์น๋ฅผ ์ญ์ ํ๋ ค๋ฉด ์๊ธฐ ์์ ์ ์์น์์๋ ์ญ์ ํ ์ ์๋ค. ์ด๊ฑด ํฐ๋ฏธ๋์์ rm์ผ๋ก ๋๋ ํ ๋ฆฌ ์ญ์ ํ๋ ๊ฒ๊ณผ ๋์ผํ๋ค.
๋ธ๋์น ์ญ์ ํ ์คํธ๋ฅผ ์ํด ์์์ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ญ์ ํด๋ดค์ ๋ ์ฒซ๋ฒ์จฐ๋ ์์น์ ๋ํ ์๋ฌ๊ฐ, ๋ ๋ฒ์งธ๋ ์์ ํ ๋ณํฉ๋์ง ์์๋ค๊ณ ๋ฌ๋ค.
userpc@DESKTOP-UQ5OHLV MINGW64 ~/Downloads/git_study/roadtrip (deletme)
$ git branch -d deletme
error: cannot delete branch 'deletme' used by worktree at 'C:/Users/userpc/Downloads/git_study/roadtrip'
---
userpc@DESKTOP-UQ5OHLV MINGW64 ~/Downloads/git_study/roadtrip (master)
$ git branch -d deletme
error: the branch 'deletme' is not fully merged
hint: If you are sure you want to delete it, run 'git branch -D deletme'
hint: Disable this message with "git config advice.forceDeleteBranch false"
๋ ๋ฒ์งธ์ ๊ฒฝ์ฐ ๋๋ถ์ -D ์ต์ ์ ์ฌ์ฉํด ๋ณํฉ ์ํ ์๊ด์์ด ๋ธ๋์น ๊ฐ์ ์ญ์ ๋ฅผ ์งํํ ์ ์๋ค. ์์ ์ ๊ฒฝ์ฐ ๋ณํฉ๋ ๋ด์ฉ์ด ์์ผ๋ฏ๋ก ๊ฐ์ ์ญ์ ํ๋ค.
๐ธ git branch -m <another branch-name>
userpc@DESKTOP-UQ5OHLV MINGW64 ~/Downloads/git_study/roadtrip (master)
$ git switch recentish-music
Switched to branch 'recentish-music'
userpc@DESKTOP-UQ5OHLV MINGW64 ~/Downloads/git_study/roadtrip (recentish-music)
$ git branch -m 2000s
userpc@DESKTOP-UQ5OHLV MINGW64 ~/Downloads/git_study/roadtrip (2000s)
$ git status
On branch 2000s
nothing to commit, working tree clean
๋ธ๋์น ์ด๋ฆ ๋ณ๊ฒฝ์ ์ญ์ ์ ๋ฌ๋ฆฌ ํด๋น ๋ธ๋์น์ ์์นํด์ผํ๋ค. ํฐ๋ฏธ๋์์ move๋ก ํ์ผ๋ช ์ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค.
์น์ 7 : ๋ธ๋์น ๋ณํฉํ๊ธฐ
๋ณํฉ์ ๋ธ๋์น ์์ ์ ํ์์ ์ธ ํน์ง ์ค ํ๋์ด๋ค. ๋ณํฉ์ git merge ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
master ๋ธ๋์น์์๋ ์ด๋ค ์คํ๋ ์ํํ์ง ์์ผ๋ฉฐ ๋ค๋ฅธ ํผ์ฒ ๋ธ๋์น์์ ์์ ํ ํ ์คํธ๋ฅผ ๊ฑฐ์ณ ์ ์ ํ๋ค๊ณ ํ๋จ๋๋ฉด master ๋ธ๋์น์ ํด๋น ์์ ์ ๋ณํฉ์ํฌ ์ ์๋ค.
1. ๋ณํฉ์ ํน์ ์ปค๋ฐ์ด ์๋ ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ค. ์ํ๋ ์ปค๋ฐ๋ค์ ์ ํํด์ ๊ฒฐํฉํ ์ ์๋ค.
2. ํญ์ ํ์ฌ ํค๋ ๋ธ๋์น์ ๋ณํฉํ๋ค.
๋ ๋ฒ์ ์ปค๋ฐ์ด ์คํ๋ Bugfix ๋ธ๋์น๋ฅผ master ๋ธ๋์น์ ๋ณํฉํ๊ธฐ๋ฅผ ์ํ๋ค.
๋จผ์ ์ฒซ๋จ๊ณ๋ ๋ณํฉํ๊ธธ ์ํ๋ ๋ธ๋์น๋ก ์ด๋ํ๋ค. ๋ฐ๋ผ์ master ๋ธ๋์น๋ก ์ด๋ํ๋ค.
๋จผ์ git switch master๋ก ๋ง์คํฐ ๋ธ๋์น๋ก ์ด๋ํ ๋ค, git merge bugfix๋ฅผ ํตํด Bugfix ๋ธ๋์น์์ ์ปค๋ฐ๋ ๋ด์ฉ์ ๋ณํฉํ์ฌ master๋ฅผ ๋์ผํ ์ปค๋ฐ์ผ๋ก ์ด๋์์ผ ๋ช ๊ฐ์ ์ปค๋ฐ์ ๋นจ๋ฆฌ ๊ฐ๊ธฐ ํ์๋ค.
๋ค์ ๋ด์ฉ์์ ์ด๋ฌํ ๋นจ๋ฆฌ ๊ฐ๊ธฐ ๋ณํฉ์ ๋ํด ๋ค๋ฃฐ ์์ ์ด๋ค.
2๊ฐ์ ๋ธ๋์น๊ฐ ์๊ณ ๋ธ๋์น ์ค ํ๋๋ ์ฒซ๋ฒ์งธ ๋ธ๋์น๊ฐ ๊ฐ๊ณ ์์ง ์์ ์ถ๊ฐ ์ปค๋ฐ์ ๊ฐ๊ณ ์๋ค. ๋ฐ๋ผ์ก๊ธฐ ์ํด์๋ ํฌ์ธํฐ๋ฅผ ์์ผ๋ก ์ฎ๊ธฐ๋ฉด ๋๋ค. ์ด๊ฒ์ด git merge ๋ช ๋ น์ด ์ด๋ฐ ์์ ์์ ์ํํ๋ ์์ ์ด๋ค.
git merge bugfix, ์ด ๋ช ๋ น์ ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ master ๋ธ๋์น์ ์๋ค๋ฉด ํฌ์ธํฐ๋ฅผ bugfix๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ด์ master๋ ๋ชจ๋ ์ด๋ ฅ์ ๊ฐ๊ฒ ๋๋๋ฐ ์ด์ ์์ ๋ฟ ์๋๋ผ bugfix๊ฐ ๊ฐ๊ณ ์๋ ์์ ๋ค์ ๋ชจ๋ ๊ฐ๋๋ค.
๋นจ๋ฆฌ ๊ฐ๊ธฐ ๋ณํฉ ์ํํ๊ธฐ
- ๋ชฉ์ ์ง, ๋ณํฉํ๋ ค๋ ๋ธ๋์น๋ก ์ด๋. ์ฌ๊ธฐ์ ๊ฒฝ์ฐ master ๋ธ๋์น๋ก ์ด๋.
- git merge ๋ช ๋ น์ master๋ก ๋ณํฉํ๊ณ ์ถ์ ๋ธ๋์น ์ด๋ฆ ์ถ๊ฐํ๊ธฐ. ์ด ๋ช ๋ น์ด๋ฅผ ํตํด master๊ฐ bugfix ๋ธ๋์น์์ ์ด ๋ ์ปค๋ฐ์ ๋ฐ๋ผ์ก์ ๊ฒ์. ๋ค๋ฅธ ์ํฉ์์ bugfix์๋ ์๊ณ master์๋ง ์กด์ฌํ๋ ์ปค๋ฐ์ด ์์ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ์ ์ธ ์์ ์ ํด์ผํ๊ณ ๋๋ ์ถฉ๋ ์ ๋ณด๊ฐ ์์ ์ ์๋ค.
๊ฐ์์์๋ ์ด์ ์ ์ค์ต์ ํตํด ๋ง๋ค์ด๋ ํ๋ ์ด๋ฆฌ์คํธ ํ ์คํธ ๋ธ๋์น๋ค์ ํ์ฉํ์๋ค.
master๋ธ๋์น์์ ๋ถ๊ธฐ๋์ด ๋์จ ๋ธ๋์น์ ์ฌ๋ฌ๋ฒ ์ปค๋ฐ๋์ด ๋ด์ฉ์ด ์ถ๊ฐ๋ ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ ์์ .
master์ oldies ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ฉด ์ปค๋ฐํ๋ ๋ด์ฉ๋ค์ ๋ฐ๋ผ์ก์ผ๋ฉด์ oldies์ ๋ชจ๋ ๋ ธ๋๊ฐ ์ถ๊ฐ๋๋ฉฐ ์ ๋ฐ์ดํธ๊ฐ ๋๋ค. ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ฉด ์ปค๋ฐ ๋ํ ์ถ๊ฐ๋์์์ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ๋ณํฉํ๋ค๊ณ ํด์ ๋ณํฉํ๋ oldies ๋ธ๋์น๊ฐ ์ญ์ ๋์ง ์๊ณ ์ฌ์ ํ ๋จ์์์ผ๋ฉฐ oldies๋ก ๋์๊ฐ์ ์๋ก์ด ์์ ์ ํ๋ฉด ์ด ๋ด์ฉ๋ค์ master์ ์ค์๊ฐ์ผ๋ก ๋ฐ์๋๋ ๊ฒ์ด ์๋๋ค. ์ฌ์ ํ ๋ ๋ฆฝ์ฑ์ ์ ์งํ๋ค.
๋ณํฉ ์ปค๋ฐ ์์ฑํ๊ธฐ
์์ ํ ๋ง์คํฐ ๋ธ๋์น์ ๋ณํฉํ๋ ค ํ ๋ ๋ค๋ฅธ ์ฌ๋์ด ์ด๋ฏธ ๋ง์คํฐ ๋ธ๋์น์ ์์ ํ์ฌ bugfix ๋ธ๋์น์๋ ์๋ 10๊ฐ์ ์ปค๋ฐ์ด ๋ง์คํฐ ๋ธ๋์น์ ์๋ ์ํฉ. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ง์คํฐ๊ฐ ๋ค๋ฅธ ๋ธ๋์น๋ฅผ ๋ฐ๋ผ์ก๋๊ฒ ์๋๋ฏ๋ก ๋นจ๋ฆฌ ๊ฐ๊ธฐ ๋ณํฉ์ ํ ์ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ bugfix ๋ธ๋์น์๋ ์๋ ์๋ก์ด ์ ๋ณด๋ค์ด ์๊ณ , bugfix๊ฐ ๊ฐ๊ณ ์๋ ์ ๋ณด๋ค์ ๋ง์คํฐ์ ์๋ค.
ํ์ฌ ์์ ๋ ๋ณํฉ์ ์ถฉ๋ํ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํ๋ค.
๋นจ๋ฆฌ ๊ฐ๊ธฐ ๋ณํฉ์ด ์๋๋ผ๋ฉด - ๋ณํฉ ์ปค๋ฐ์ด๋ผ๋ ๊ฒ์ด ์์ฑ๋๋๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊น์ ๋ณํฉ์ ๊ธฐ์ค์ด ๋๋ ๋ธ๋์น์ ์ปค๋ฐ์ ์์ฑํ๋ค. ์ ์ปค๋ฐ์ ๋ง๋ค๊ณ ์ปค๋ฐ ๋ฉ์ธ์ง๋ฅผ ํฌํจํ๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ํ์ํ๋ค.
๋ ์ฃผ์ํ ์ ์ ๋ณํฉ ์ปค๋ฐ์ ๋ ๊ฐ์ ๋ค๋ฅธ ๋ถ๋ชจ ์ปค๋ฐ์ ๊ฐ๋๋ค. ๋ฐ๋ผ์ ๋ณํฉ ์ปค๋ฐ์ ๋๋ฟ๋ง ์๋๋ผ ๋ค์์ ๋ถ๋ชจ ์ปค๋ฐ์ ๊ฐ์ง ์ ์๋ค.
์ด๋ ๊ฒ ๋ ๊ฐ์ ๋ธ๋์น๋ฅผ ๋ณํฉํ์ ๋ ์ปค๋ฐ ๋ฉ์ธ์ง๊ฐ ๋จ๋ฉด์ ํธ์ง ๊ฐ๋ฅํ๋ค.
๋ณํฉ ์ค ์ถฉ๋ ๋ฐ์
๊น์ ์๋์ ์ผ๋ก ๋ณํฉํ๋ ๋ฐฉ๋ฒ์ ์์ง ๋ชปํด์ ์ด๋ค ๊ฒ์ ์ ์งํ๊ณ ์ด๋ค ๊ฒ์ ์ ๊ฑฐํด์ผ ํ๋์ง ๊ฒฐ์ ํ์ง ๋ชปํ๋ค.
๊ทธ๋์ ๋ณํฉ ์ถฉ๋์ด ๋ฐ์ํ๋ค.
git merge๋ฅผ ์คํํ ๋ ์ถฉ๋์ด ์๊ธฐ๋ฉด ์ด๋ฐ ๋ฉ์ธ์ง๊ฐ ๋จ๋ฉด์ ํน์ ํ์ผ์์ ์ถฉ๋์ด ๋ฐ์ํ์ฌ ์๋ ๋ณํฉ์ ์คํจํ๊ณ ์ถฉ๋์ ํด๊ฒฐํ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ์ปค๋ฐํ๋ผ๊ณ ๋์จ๋ค.
์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์ HEAD ๋ถ๋ถ์ ์ด์ํ ํ์์ ๋ธ๋์น ์ด๋ฆ์ ๋ณผ ์ ์๋ค.
ํ์ฌ ๋ด๊ฐ ์๋ HEAD๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น์์ ๊ฐ์ ธ์ฌ ์ปจํ ์ธ ์ด๊ณ ๋ณํฉํด์ ๋ฃ์ผ๋ ค๋ ๊ธฐ์ค ๋ธ๋์น์ด๋ฉฐ ์์ ํ์ด์ด ==== ์ฌ์ธ์ผ๋ก ํ์๋๋ค
<<<<<<<<HEAD
I have 2 cats
I also have chickens โฌ ๏ธ์ฌ๊ธฐ๊ฐ ๋ณํฉํด์ ๋ฃ์ผ๋ ค๋ ๊ธฐ์ค ๋ธ๋์น
============
I used to have a dog :( โฌ ๏ธ ์ฌ๊ธฐ๊ฐ bugfix ๋ธ๋์น์์ ์จ ๊ฒ์ผ๋ก ๋ณํฉํด์ ๋ฃ์ผ๋ ค๋ ๋ด ๋ธ๋์น
>>>>>>>bug-fix
๊ฐ๋จํ ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํ์๋ฉด
1. ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๊น์ ์ถฉ๋์ด ์๊ธด ํ์ผ์ ์๋ ค์ค๋ค.
2. ๊ทธ ํ์ผ์ ์ด์ด์ ํธ์งํ์ฌ ์ถฉ๋ ๋ถ๋ถ์ ํด๊ฒฐํ๋ค.
3. ๋ณ๊ฒฝ์ฌํญ์ ๋ฑ๋กํ๊ณ ์ปค๋ฐํด์ ์๋ฃํ๋ค.
๋ณํฉ ์ค ์ถฉ๋ ๋ฐ์
๋ง์คํฐ ๋ธ๋์น์์ playlist.txt๋ฅผ ๋ง๋ค๊ณ popsong๊ณผ trendy ๋ ๋ธ๋์น๋ฅผ ์์ฑํ์๋ค.
=>> playlist.txt
this is new playlist
๊ฐ๊ฐ์ ๋ธ๋์น๋ก ์ด๋ํ์ฌ ๊ฐ์ playlist.txt ํ์ผ์์ ์๋ก ๋ค๋ฅธ ๋ด์ฉ์ ์ถ๊ฐํ์๋ค.
popsong ๋ธ๋์น
this is new playlist
add popsong
faded
fall
blabla etc....
trendy ๋ธ๋์น
this is new playlist
add trendy songs
aa
bb
cc
๋์ผํ ํ์ผ์ ๋ํด ๊ฐ๊ฐ์ ๋ธ๋์น์์ ๋ด์ฉ์ ์ถ๊ฐํ๊ณ ์คํ ์ด์ง์ ์ฌ๋ฆฌ๊ณ ์ปค๋ฐ์ ํด์ฃผ์๋ค.
๊ทธ๋ฐ ๋ค์ trendy ๋ธ๋์น์์ popsong ๋ธ๋์น์ ๋ณํฉ์ ํ๋ ค ํ๋๋ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ถฉ๋์ด ๋ฐ์ํ์ผ๋ ์์ ํด๋ฌ๋ผ๋ ๊ฒฝ๊ณ ์ด๋ค.
๊ทธ๋ผ trendy ๋ธ๋์น์ playlist.txt ํ์ผ์ ๋ค์ด๊ฐ๋ณด๋ฉด
humandeep@DESKTOP-FSOD2IH MINGW64 ~/Downloads/git_study/test (trendy|MERGING)
$ vim playlist.txt
--------------------------
this is new playlist
<<<<<<< HEAD
add trendy songs
aa
bb
cc
=======
add popsong
faded
fall
blabla etc....
>>>>>>> popsong
์ด๋ ๊ฒ ์ ๋ฒ ๊ฐ์์์ ๋ณด์ฌ์ค ํํ๋ฅผ ๋๊ณ ์๋ค.
HEAD๊ฐ ๊ฐ๋ฆฌํค๋ ๋ถ๋ถ์ด ํ์ฌ ๋ธ๋์น ์์น์ ๋ด์ฉ์ด๊ณ ์๋๊ฐ popsong ๋ธ๋์น์ ๋ด์ฉ์ด๋ค.
this is new playlist
add trendy songs
aa
bb
cc
add popsong
faded
fall
blabla etc....
ํด๋น ๋ด์ฉ์ ์ด๋ ๊ฒ ์์ ํ์๋ค.
์์ ํ๋ ค๋ฉด <<<<HEAD, ======, >>>>>popsong ๊ณผ ๊ฐ์ ๋ถ๋ถ๋ค์ ์ญ์ ํ๊ณ ๋ด๊ฐ ์ํ๋ ํํ๋ก ์์ ํ๊ณ ์ ์ฅํ๋ฉด ๋๋ค.
lee@DESKTOP-FSOD2IH MINGW64 ~/Downloads/git_study/test (trendy|MERGING)
$ git status
On branch trendy
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: playlist.txt
no changes added to commit (use "git add" and/or "git commit -a")
(base)
๊ทธ๋ฐ๋ค์์ git status๋ฅผ ํตํด ์ํ๋ฅผ ํ์ธํด๋ณด๋ฉด
On branch trendy : ํ์ฌ trendy ๋ธ๋์น์ ์๊ณ
fix conflicts and run "git commit" : ์ถฉ๋ ์ํฉ์ด ์์ผ๋ฉฐ playlist.txt ํ์ผ์ด ์์ ๋์๋ค๊ณ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
๊น ์๊ฐํ
lee@DESKTOP-FSOD2IH MINGW64 ~/Downloads/git_study/test (trendy)
$ git log --graph --all --oneline
* 31fed02 (HEAD -> trendy) resolve conflicts
|\
| * 4ed90cd (popsong) add popsong
* | 22d73f2 add trendy songs
|/
* e336985 (master) add new playlist
git log --graph --all --oneline ํด๋น ๋ช ๋ น์ด๋ฅผ ํตํด ํฐ๋ฏธ๋ ์ฐฝ์์ ์ปค๋ฐ๊ณผ ๋ธ๋ซ์น ๊ทธ๋ํ๋ฅผ ๋ณผ ์ ์์ผ๋ ๊ฐ๋ ์ฑ์ด ์ ์ข์ง ์๋ค.
๊ทธ๋์ VS Code์์ Git Graph๋ฅผ ์ด์ฉํ์๋ค.
๊น ๊ทธ๋ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋ ๊ธ๋ค์ ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค
- https://thinkingtool.tistory.com/entry/VSCODE-%EC%97%90%EC%84%9C-git-branch-%EA%B7%B8%EB%9E%98%ED%94%84%EB%A1%9C-%EB%B3%B4%EA%B8%B0
- https://jhyeok.com/vscode-git-graph/
ํด๋น ๋ ํฌ ํด๋๋ก VS Code๋ฅผ ์ด๊ณ ๋งจ ์ผ์ชฝ ์นธ ์ค Source Control ์ ๋ค์ด๊ฐ๋ค์ ์์ ์์ด์ฝ์ ๋๋ฅด๋ฉด ์๋์ฒ๋ผ ๊ฐ ๋ธ๋์น์ ๋ถ๊ธฐ์ ์ปค๋ฐ ๋ก๊ทธ๋ค์ ํ์ธํ ์ ์๋ค. ๊ผญ ๊นํฌ๋ผ์ผ์ ์ธ ํ์๋ ์๋ ๊ฒ ๊ฐ๋ค.
VS Code ์ฌ์ฉํด ์ถฉ๋ ํด๊ฒฐํ๊ธฐ
git checkout -b <branch-name> : ๋ธ๋์น๋ฅผ ์๋ก ์์ฑํ์ฌ ํด๋น ๋ธ๋์น๋ก ์ด๋ํ๋ ๋ช ๋ น์ด
VSCode๋ฅผ ์ฌ์ฉํด ์ถฉ๋ ์ํฉ์ ํด๊ฒฐํ๊ณ ์ ์์๋ก merge์ ์ถฉ๋์ ์ผ์ผ์ผฐ๋ค.
master๋ธ๋์น์์ ์๋ก์ด ๋ธ๋์น, silence๋ฅผ ์์ฑํ ๋ค์ ๋์ผํ ํ์ผ์ ๋ํด ์๋ก ๋ค๋ฅธ ์์ ์ ์ํํ ๋ค์ master ๋ธ๋์น์์ silence ๋ธ๋์น๋ฅผ ๋ณํฉ์์ผฐ๋ค.
์ถฉ๋๋ฐ์. ํด๋น ๋ ํฌ์์ VSCode๋ฅผ ์ด์ด๋ณด๋ฉด
์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์์ ์ถฉ๋ ๋ด์ฉ์ ๋ํด ์ค๋ช ์ ํด์ค๋ค.
์ด๋ ์์ Accept Curent Change / Accept Incoming Change / Accept Both Changes / Compare Changes ๋ฒํผ์ ๋๋ฌ์ ์ถฉ๋ ์ํฉ์ ์์ ํ ์ ์๊ณ ๋๋ ์ํ๋๋๋ก ์๋ก ์์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
ํด๋น ๋ด์ฉ์ ์์ ํ๋ค์๋ ๋ค์ add, commit์ ๊ฑฐ์ณ ์ปค๋ฐ์ ํ๋ค์ ๋ณํฉํ๋ฉด ์ ์์ ์ผ๋ก master ๋ธ๋์น์ ๋ณํฉ๋๋ค.
๋ง์ฝ ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ์ ์์ ๋ง ํ๊ณ ์คํ ์ด์ง์ ์์ฌ๋ฆฌ๊ณ ์ปค๋ฐ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋๊น ์ฃผ์ํ ๊ฒ.