1. Branch
๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์ฝ๋๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋ณต์ฌํด์ผ ํ๋ ์ผ์ด ์์ฃผ ์๊น๋๋ค. ์ฝ๋๋ฅผ ํต์งธ๋ก ๋ณต์ฌํ๊ณ ๋์ ์๋ ์ฝ๋์๋ ์๊ด์์ด ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ ์ ์์ต๋๋ค.
๋ง์ฝ, ์ฝ๋๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ํ ์ค๋ก ์ปค๋ฐํ ๊ฒฝ์ฐ ๋๊ฐ์ ์ฝ๋๋ฅผ ๋์์ ์ปค๋ฐํ๋ฉด ์ถฉ๋์ด ์ผ์ด๋์ง ์์๊น์? ์ด๋ด ๋ ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ์ฌ ์ฌ๋ฌ์ค๋ก ์ปค๋ฐํ๋ ๊ฒ์ด ๋ธ๋์น์
๋๋ค.
์ด๋ ๊ฒ ๋ธ๋์น๋ฅผ ์์ฑํ๋ฉด ์ฌ๋ฌ ์ค๋ก ์ปค๋ฐํ๋ฉด ์ถฉ๋์ด ์ผ์ด๋๋ ์์ ์ ์ฐพ์ ํด๊ฒฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
ย
๋ธ๋์น๋ ํ๋์ ๊ธฐ๋ฅ์ ๊ฐ๋ฆฌํค๊ฑฐ๋ ํน์ ์ปค๋ฐ์ ๊ฐ๋ฅดํค๋ ๋ฐ๋ก๊ฐ๊ธฐ ๊ฐ์ ๊ฒ ์
๋๋ค. ๋ธ๋์น๋ฅผ ์์ฑํ๋ฉด ํ์ฌ ์ปค๋ฐ์ ๊ฐ๋ฅดํค๋ ๋ธ๋์น๊ฐ ์์ฑ๋ฉ๋๋ค.
ํน์ ๋ธ๋์น์์ ์์
์ค์ธ๋ฐ ์๋ก์ด ์ปค๋ฐ์ ํ๋ฉด ๋ธ๋์น๋ ๊ทธ ์๋ก์ด ์ปค๋ฐ์ ๊ฐ๋ฅดํค๊ฒ ๋ฉ๋๋ค.
ย
๊ธฐ๋ณธ ๋ธ๋์น๋ master ๋ธ๋์น ์
๋๋ค. git์ ์ฅ์๋ฅผ ์ด๊ธฐํ ํ ๋ ์๋์ผ๋ก ๋ง๋ค์ด ์ง๋๋ค. ์ด๋, 'HEAD'๋ผ๋ ํน์ํ ํฌ์ธํฐ๊ฐ ์์ต๋๋ค. ์ด ํฌ์ธํฐ๋ ์ง๊ธ ์์
์ค์ธ ๋ธ๋์น๋ฅผ ๊ฐ๋ฅดํต๋๋ค.
ย
ํ๋์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด ํน์ ๋ธ๋์น์ ๋ด์ฉ๋ค์ master ๋ธ๋์น์ ํฉ์นฉ๋๋ค. ๋ ์๋ก์ด ์์
์ ํ๋ ค๊ณ ํ๋ฉด master ๋ธ๋์น์์ ๋ค์ ์๋ก์ด feature๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์์
์ ํฉ๋๋ค.
ํน์ ๊ธฐ๋ฅ์ ์์
ํ๊ณ ์๋๋ฐ ๊ธํ๊ฒ ๋ฒ๊ทธ๋ฅผ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ํ์ฌ์ ์์
์ํ๋ฅผ ์์๋ก ์ปค๋ฐํด๋๊ณ ์ด์ ๊ธฐ๋ฅ ์์
์ค์ธ ์ํ๋ก ๋ธ๋์น(์์
ํด๋)๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ฒ๊ทธ ํจ์น์ฉ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์์ ์์
์ ํฉ๋๋ค. ์ดํ ์์
์ด ์๋ฃ๋๋ฉด ๋ฒ๊ทธ ํจ์น์ฉ ๋ธ๋์น์ ์ถ๊ฐ๋ ๋ณ๊ฒฝ ๋ด์ญ์ ๋ง์คํฐ ๋ธ๋์น์ ํฉ์น ์ ์์ต๋๋ค.
์ด๋ฐ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด master๋ธ๋์น๋ ๊ฐ์ฅ ์ต๊ทผ์ ๋ฐฐํฌํ ์์ค์ฝ๋์ ์ปค๋ฐ์ ๊ฐ๋ฅดํค๊ณ ์๊ฒ ๋ฉ๋๋ค.
ย
์ง๊ธ๋ถํฐ ๋ธ๋์น ์ฌ์ฉ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
- ํ์ฌ ๋ธ๋์น ๋ชฉ๋ก๊ณผ ํ์ฌ ๋ธ๋์น ํ์ธ
$ git branch
ย
ย
- branch ๋ง๋ค๊ธฐ ๋ธ๋์น๋ฅผ ํ์ฌ ์์ ์ ๋ง๋ค์ ์์ต๋๋ค. Gary ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ๋ณด์.
$ git branch Gary
ย
ย
2. git checkout
2-1. checkout
checkout์ ๋ธ๋์น ๋ณ๊ฒฝ ๋๋ ์์
ํธ๋ฆฌ ํ์ผ ๋ณต์์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง Git 2.23์์ checkout ์ ๋์ ํด switch์ restore๊ฐ ๋์
๋์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋์ฒด๋ ์ด์ ๋ ๊ธฐ์กด์ 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 master $ git branch binky $ git checkout binky $ git commit -m "๋นํค 1"
ย
ย
2-2. switch
ย
๋ธ๋์น ๋ณ๊ฒฝํฉ๋๋ค.
$ git switch Gary
ย
๋ธ๋์น๋ฅผ ์๋ก ๋ง๋ค์ด์ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค.
$ git switch -c Gary
ย
ย
2-3. restore
ํ์ผ ์์ ๋ด์ฉ ๋ณต์๊ณผ add๋ฅผ ํตํด ์คํ
์ด์ง์ ์ฌ๋ฆฐ ๊ฒ์ ๋บ ๋์๋ ์ฌ์ฉํฉ๋๋ค.
ย
์ฐ์ ํ์ผ์ ์์ฑํ ํ ์ปค๋ฐ์ ํฉ๋๋ค.
$ touch README.md $ vi README.md //i->์์ฑ ํ->Esc->:wq $ git add . $ git commit -m "add file" $ git status
ย
ย
์ดํ ํด๋น ํ์ผ์ ์์ ํ ํ์ ์ ์ฅ์ ํ๊ณ ์ํ๋ฅผ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$ vi README.md //i->์์ ํ->Esc->:wq
ย
modified ํ์ผ์ด ์๋ค๊ณ ๋์จ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
ย
์ด๋, ํ์ผ ๋ณ๊ฒฝ๋ด์ญ์ modified ํ์ผ์์ unmodified ํ์ผ๋ก ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง๊ฐ ์์ต๋๋ค.
1) restore์ ์ด์ฉํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ๋๋๋ ค ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$ git restore README.md
ย
2) checkout์ ์ด์ฉํ์ฌ ํ์ผ ๋ณ๊ฒฝ๋ด์ญ์ ๋๋๋ฆฝ๋๋ค. ์ด๋, checkout์ผ๋ก ์ง์์ง ๋ด์ฉ์ commit์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ค์ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
$ git checkout -- README.md
ย
modified ํ์ผ์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
ย
ํ์ผ์ ์ด์ด ํ์ธํ ๊ฒฐ๊ณผ์
๋๋ค.
hello world Byebye
hello world
ย
์คํ
์ด์ง ์ฌ๋ฆฐ ๊ฒ์ ๋นผ๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ด์ฉํฉ๋๋ค.
$ git add . $ git status
ย
ย
1) restore ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๋นผ๊ธฐ
$ git restore --staged README.md
ย
1) reset ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๋นผ๊ธฐ
$ git reset HEAD README.md
ย
์ํ๋ฅผ ํ์ธํด ๋ณด๋ฉด ์คํ
์ด์ง์ ์ฌ๋ผ๊ฐ ์์ง ์์ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ย
3. merge(ํฉ๋ณ)
ย
๋ branch๋ก ๋๋์ด ์์
ํ๋ ๊ฒ์ ๋ณํฉํ๋ ๋ช
๋ น์ด์
๋๋ค.
$ git checkout master $ git log $ git merge binky $ git log
ย
merge๊ฐ ์๋ฃ๋์์ผ๋ฉด push ๊น์ง ํด์ฃผ์
์ผ ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์์ด ๋ฉ๋๋ค.
$ git push origin master
ย
ย
์์ binky ๋ธ๋์น๋ฅผ mergeํ ํ์ gary์ ๋ธ๋์น๋ฅผ mergeํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ง์ฝ, ๋ ๋ธ๋์น๊ฐ ๊ฐ์ ๊ณณ์ ์์ ํ๋ค๋ฉด ์ถฉ๋์ด ์ผ์ด๋์ง๋ง ์ง๊ธ์ ๋ค๋ฅธ ๊ณณ์ ์์ ํ๋ค๋ ๊ฐ์ ํ์ ์งํํ๋๋ก ํ๊ฒ ์ต๋๋ค.
$ git merge Gary $ git push origin master
ย
ย
4. conflict(์ถฉ๋)
๊ฐ๋ฆฌ ๋ธ๋์น์ master ๋ธ๋์น ๋ ๋ค README.md์์ ์์
์ ํ๋๋ฐ ์๋ก ๋ณ๊ฒฝ ๋ด์ญ์ด ๋ค๋ฅด๋ค๊ณ ๊ฐ์ ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋, ๊ฐ๋ฆฌ ๋ธ๋์น์ master ๋ธ๋์น์ ์์
๋ด์ญ์
๋๋ค.
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
ย
์ดํ commit > push ๋ฅผ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.