.gitignore
ํ์ผ์ ๋ญ๊ฐ์?amend
, squash
: ์ปค๋ฐ ๊ฐ๊ณ ๋๊ธฐstash
: working tree๋ฅผ ์ ๊น๋ง ์ ์ฅmerge
rebase
์ด๋ฒ 2์ผ ์ฐจ ๋ณต์ต์ ๊ธ ๋ ๊ฐ๋ก ๋๋ ์ ์ธ๊ฑด๋ฐ
์ด ๊ธ์์๋ 5-1๊น์ง๋ง ๋ค๋ฃฌ๋ค!
.gitignore
ํ์ผ์ ๋ญ๊ฐ์?๊น์ด ๊ด๋ฆฌํ์ง ์์์ผ๋ฉด ํ๋ ํ์ผ๋ค์ ์ ์ฅํด๋๋ ํ์ผ์ด๋ค.
์์ธํ ๋งํ์๋ฉด git์ ์ฌ์ฉํ๋ฉด์ ์๊ฒฉ ์ ์ฅ์์ ํ์ผ์ ์ฌ๋ฆด ์ผ์ด ์ ๋ง ๋ง์๋ฐ, ๊น์ด ๊ด๋ฆฌํ๋ ํ์ผ๋ค์ ๋ชจ๋ ์๊ฒฉ์ ์ฅ์์ ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ๊ณต์ ํ๊ณ ์ถ์ง ์์ ํ์ผ์ด ์๋ค๋ฉด .gitignore
์ ๋ฏธ๋ฆฌ ์ ์ฅํด์ผ ํ๋ค.
๋ ํผ์ local์์ ์์ ์ ํ ๋๋ ๊ตณ์ด ๋ณ๊ฒฝ์ฌํญ์ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ ํ์ผ๋ค์ ์จ๋์๋ ๋๋ค.
์ด๋ฐ ์์ผ๋ก, .gitignore
์ ์ด๋ฆ์ ์ ์ฅํด๋ ํ์ผ๋ค์ git add
๋ฅผ ์คํํด๋ ํ์ผ๋ค์ด tracking ๋์ง ์๋๋ค.
#์ ์ฌ์ฉํ๋ฉด ์ฃผ์์ฒ๋ฆฌ๋๋ค.
์์ ๊ฐ์ .gitignore
ํ์ผ์ ์ต์์ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํด๋๊ณ ๋์, README.txt
์ text/README.txt
, one.pdf
์ด๋ ๊ฒ ์ธ ๊ฐ์ ํ์ผ์ ์์ฑํ๊ณ , node_modules/
๋ผ๋ ๋๋ ํ ๋ฆฌ๋ ์์ฑํ๋ค.
git status
์ ๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋ ๊น? ์ฐ๋ฆฌ๊ฐ ์ถ๊ฐํ ํ์ผ๋ค์ด Tracking ๋ผ์ผํ๋ ํ์ผ๋ก ์ธ์๋ ๊น, ์๋๊น?
์ ๋ต์ No
.
status ๋ช
๋ น ์ ์ถ๋ ฅ๋๋ untrackted files์ ํฌํจ๋์ง ์๋๋ค.
๊ทธ๋ผ ์์ฐ์ค๋ฝ๊ฒ git add
์์๋ .gitignore
์ ํฌํจ๋๋ ์ ํ์ผ๋ค์ Index๋ก ์ฌ๋ผ๊ฐ์ง ์๋๋ค๋ ๊ฑธ ๋ฐ์๋ค์ผ ์ ์๋ค. ๐ฅฐ
๊ทธ๋ฐ๋ฐโโ ์ค์๋ก ํ์ผ์ Trackingํ(index ์์ญ์ ๋ค์ด๊ฐ) ํ์ .gitignore
์ ํ์ผ๋ช
์ ์ถ๊ฐํ๋ฉด .gitignore
์ ์ํด ํํฐ๋ง๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ณ์ํด์ Index/local repository์ ๋จ์์๊ฒ ๋๋ค.
์ด๋ด ๋๋ git rm -r --cached
๋ช
๋ น์ด๋ฅผ .gitignore
์ ์์น์์ ์คํํด์ฃผ๋ฉด ๋๋ค.
๋ก์ปฌ์์ ์ปค๋ฐ ๊ธฐ๋ก๊น์ง ์ง์ฐ๊ณ ์ถ๋ค๋ฉด git reset
์ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๋ค.
๋ง์ฝ remote repository์ ์ฌ๋ผ๊ฐ์์ ๊ฒฝ์ฐ์๋ reset
ํ force push
๋ฅผ ํ๋ฉด ๋๋ค. (์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ผ๊ณ ํ์
จ๋ค.) ๐๐ป ์ด๊ฑฐ๋ ํ์
ํ ๋ ๋น๋ฐํค๋ฅผ ์๋ชป์ฌ๋ฆฌ๊ฑฐ๋ ํ์ ๋์ ํด๊ฒฐ์ฑ
์ด ๋ ์ ์์ ๊ฒ ๊ฐ๋ค.
amend
, squash
: ์ปค๋ฐ ๊ฐ๊ณ ๋๊ธฐamend
amend
์ต์
์ ๊ฐ์ฅ ์ต๊ทผ์ commit message/descreption ์ ์์ ํ๊ฑฐ๋ Index์ ์๋ ๋ณ๊ฒฝ์ฌํญ๋ค์ ์ต๊ทผ ์ปค๋ฐ์ ํฉ์น๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
CLI :
$ git commit --amend # ์ต๊ทผ ์ปค๋ฐ์ ํฉ์น ๋
$ git commit --amend -m "commit message" # ์ต๊ทผ ์ปค๋ฐ๋ฉ์์ง ์์
๋ ํธํ ๋ฐฉ๋ฒ:
GitKraken
์์๋ ์ด๋ ๊ฒ ์ปค๋ฐ ์ฐฝ์์ ๊ฐ๋จํ๊ฒ Amend
์ฒดํฌ๋ฐ์ค๋ง ์ค์ ํด์ฃผ๋ฉด amend ์ต์
์ ์ ์ฉํด ์ปค๋ฐํ๋ค. ๋ ์ต๊ณ ์ ์ค์ง์ด์ผ..โญ
squash
CLI
$ git rebase -i HEAD~n
# HEAD๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ์ปค๋ฐ์ผ๋ก๋ถํฐ n๊ฐ์ ์ปค๋ฐ์ ํ๋๋ก ํฉ์น๋ค.
Gitkraken
์จ! ์ ๋ ๊ฒ ์ปค๋ฐ๋ค์ ์ ํํ๊ณ Squash 4 commits
๋ฅผ ๋๋ฅด๋ฉด ๋์ด๋ค.
๊ทธ๋ผ ์ด๋ ๊ฒ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ณํ๋ค. ๊ทผ๋ฐ ์ฌ๊ธฐ์ ์กฐ์ฌํด์ผํ๋ ๊ฑด, ์ด๋ฏธ remote repository์ push๋ฅผ ํด๋ ์ํ์์ commit์ ํฉ์น๋ฉด local์ ๋ธ๋์น์ remote์ ๋ธ๋์น๊ฐ ๋ค๋ฅธ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ ๊ฒ์ด๋ฏ๋ก, ์ดํ์ push๋ฅผ ํ๋ฉด error๊ฐ ์๊ธด๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ด๋ด ๋ squash ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฃผ์ํด์ผํ๋ค.
stash
: working tree๋ฅผ ์ ๊น๋ง ์ ์ฅ์ฐ๋ฆฌ๊ฐ ํ์ผ์ ๋ณ๊ฒฝ์ฌํญ์ git add
๋ช
๋ น์ด๋ฅผ ์คํํด์ Index ์์ญ์ ์ฌ๋ ค๋์ ๋ค ๊ทธ๊ฑธ ์ ์ฅํด ๋์ ์ ์๋ค. ๋ฌด์จ ๋ง์ธ์ง ํ ๋ฒ ๋ณด์.
Working directory์ stashTest ๋ผ๋ ํ์ผ์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ git status
๋ฅผ ์คํํ๋ Untracted files์ stashTest๊ฐ ํฌํจ๋์ด์์์ ์ ์ ์๋ค.
๊ทธ ํ git add
๋ก ํ์ผ์ ๋ณ๊ฒฝ์ฌํญ์ Index ์์ญ์ ์ ์ฅํ๋ค.
๊ทธ๋ผ ๋น์ฐํ stashTest๊ฐ ์ถ๊ฐ๋์๋ค๋ ๋ณ๊ฒฝ์ฌํญ์ด Changes to be committed์ ํฌํจ๋๊ฒ ๋๋ค.
์ฌโ๊ธฐโ์โ ์ด ๋ณ๊ฒฝ์ฌํญ์ stash push
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ ์ ์ ์ฅํด๋ณด์
๋ช
๋ น์ ์คํํ๊ณ ์ถ๋ ฅ๋ ๊ฒ์ ๋ณด๋ฉด working directory์ index์ ์ํ๊ฐ master(๋ธ๋์น) ์ ์ ์ฅ๋์๋ค๊ณ ์จ์๋ค. ์ฌ๊ธฐ์ git status
๋ฅผ ํ์ธํด๋ณด๊ณ ์ถ์๋ค. ๊ทธ๋์ ์คํ์ ํด๋ณด๋๊น
์๊น ์ฐ๋ฆฌ๋ commit์ ํ์ง ์์์๋๋ฐ๋ nothing to commit์ด๋ผ๋ฉฐ Index ์์ญ์ ์๋ ๋ณ๊ฒฝ์ฌํญ๋ค์ด ์ฌ๋ผ์ง ๊ฒ์ ์ ์ ์๋ค.
์ฐ๋ฆฌ๊ฐ stash push๋ก ์ ์ฅํ ๋ณ๊ฒฝ์ฌํญ๋ค์ ํ์ธ ํ๋ ค๋ฉด stash list
๋ฅผ ์คํํ๋ฉด ๋๋ค.
์ด๋ฐ ์์ผ๋ก stash ํ๋ ๊ฒ๋ค์ ๋ฐ๋ก ๋ณผ ์ ์๋ค. stash๋ ์คํ์ฒ๋ผ LIFO ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋จผ์ push ํ ๋ณ๊ฒฝ์ฌํญ๋ค์ด ๋์ค์ pop๋๋ค.
์ฐ๋ฆฌ๋ Git์ผ๋ก ํ์ ์ ํ ๋ ๊ฐ์์ ์์ ๊ณต๊ฐ์ ๋ง๋ จํ๋ค. ์ด๊ฑธ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ Git์ branch์ด๊ณ ๋ง์ ์ฌ์ฉ์๋ค์ด git์ ์ฌ์ฉํ๋ ์ด์ ์ด๊ธฐ๋ ํ๋ค. branch๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ๋ฅผ ๋ชฉ์ ๊ณผ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌํด์ ์์ ํ๋ ๊ฒ์ด ์ฌ์์ง๋ค.
Git ๋ธ๋์น๋ ์ปค๋ฐ ์ฌ์ด๋ฅผ ๊ฐ๋ณ๊ฒ ์ด๋ํ ์ ์๋ ์ด๋ค ํฌ์ธํฐ๊ฐ์ ๊ฒ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Git์ master
๋ธ๋์น๋ฅผ ๋ง๋ ๋ค. ์ฒ์ ์ปค๋ฐํ๋ฉด ์ด master
๋ธ๋์น๊ฐ ์์ฑ๋ ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค. ์ดํ ์ปค๋ฐ์ ๋ง๋ค๋ฉด master
๋ธ๋์น๋ ์๋์ผ๋ก ๋ง์ง๋ง ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค.
์ดํด๊ฐ ์ ๋๋ ์ฌ์ง์ด ์์ด์ ๊ฐ์ ธ์๋ค.
์ฌ์ง ์ถ์ฒ : Git ๋ธ๋์น - ๋ธ๋์น๋ ๋ฌด์์ธ๊ฐ
๋ณด๋ฉด v1.0 ์ด๋ผ๋ ๋ธ๋์น์ master๋ผ๋ ๋ธ๋์น๊ฐ ์๊ณ ๋ชจ๋ f30ab (์ปค๋ฐ)์ ๊ฐ๋ฆฌํค๊ณ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌ HEAD ํฌ์ธํฐ๋ master๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ง๊ธ ์ํ์์ ์ปค๋ฐ์ ์ถ๊ฐํ๋ฉด master๊ฐ ์ต์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ head๋ master๋ฅผ ๊ทธ๋๋ก ๊ฐ๋ฆฌํค๊ฒ ๋๋ ๊ฒ์ด๋ค.
git branch
๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ค์ด๋ณด์!! ์๋์ ๊ฐ์ด git branch
๋ช
๋ น์ผ๋ก kayoung
๋ธ๋์น๋ฅผ ๋ง๋ ๋ค.
$ git branch kayoung
์๋ก ๋ง๋ ๋ธ๋์น(kayoung)๋ ์ง๊ธ ์์ ํ๊ณ ์๋ ๋ง์ง๋ง ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค.
git checkout
์ด๋ผ๋ ๋ช
๋ น์ด๋ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋ํ ์ ์๊ฒ ํด์ค๋ค.
๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋ํ๋ค ํจ์! HEAD ํฌ์ธํฐ๊ฐ ์ํ๋ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ๋ค.
ํ์ฌ HEADํฌ์ธํฐ๊ฐ kayoung ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฉด, master๋ก ์ด๋ํ๊ธฐ ์ํด ๋ค์ ๋ช
๋ น์ ์คํํ๋ฉด ๋๋ค.
$ git branch master
merge
Git์์ ๋ธ๋์น๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํด์ ๊ฐ๋ฐํ ๋, ๋ถ์
์ ํ๋ ๊ฒ์ ํฉ์ณ์ผํ๋ ๊ณผ์ ์ด ์์ด์ผํ ๊ฒ์ด๋ค. ์ด๋ด ๋ ์ฌ์ฉํ๋ ๋ช
๋ น์ด merge
๋ค.
git branch
๋ฅผ ์ฌ์ฉํ ๋๋ ํ์ฌ ๋ด๊ฐ ์ด๋ ๋ธ๋์น์ ์๋์ง๋ฅผ ํ์
ํด์ผํ๋ค. ๋ช
๋ น ๋ค์ ์ค๋ ๋ธ๋์น๊ฐ ํ์ฌ HEAD๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น์ ํฉ์ณ์ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ ๋ค์ด,
์ด๋ฐ์์ผ๋ก ํ์ฌ ๋๋ master
๋ธ๋์น์ ์๊ณ kayoung
๋ธ๋์น๊ฐ ๋ฐ๋ก ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ด ๋ git branch
๋ช
๋ น์ ๋ฐ์์ฒ๋ผ
$ git merge kayoung
์ด๋ ๊ฒ ์ฌ์ฉํด์ผํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ๊ฒฐ๊ณผ๋
CLI :
GUI :
์ด๋ฌ๊ณ ๋์๋ kayoung
branch๋ฅผ ์ญ์ ํด๋ ๋๋น!
ํธ ์ ๐ค
๋ธ๋์น ์ถฉ๋(conflict)๋ฅผ ๋ค๋ฃจ๊ธฐ ์ ์ Git์ด ๋ธ๋์น๋ฅผ ๋ณํฉํ ๋ ๊ฐ์ ํ์ผ์ ๋ณ๊ฒฝ์ฌํญ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ์ดํด๋ณด์!!
Git์ 3-way merging์ ๋ฐ๋ผ merge๋ฅผ ์ํํ๋ค.
์ค๋ช
ํ๊ธฐ ์์ ๋ฐ์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด, Base
๋ branch๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์๋ ํ์ผ ์ํ์ด๊ณ , Source
๋
๋ณํฉ์ ์ํํ๋ ๋ธ๋์น์์์ ํ์ผ ์ํ, ๋ง์ง๋ง์ผ๋ก Target
์ ๋ณํฉํ ๋ธ๋์น์ ํ์ผ ์ํ์ด๋ค.
3-way merging
์ ๋ฐ๋ก ์ด ์ธ ๊ฐ์ง ํ์ผ์ํ๋ฅผ ๋ชจ๋ ๋น๊ตํ์ฌ Mergeํ๋ ๋ฐฉ์์ ๋งํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ค์ ๋์๊ฐ์. Base
์ Source
, Target
ํ์ผ๋ค์ ๋ณด๋ฉด ์ฒซ๋ฒ์งธ ์ค์ ๋ชจ๋ ๊ฐ์์ Merged ํ์ผ์๋ ๊ทธ๋๋ก ๋ณํฉ์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ ์ค์ ๋ณด๋ฉด Source
์์๋ง ๋ฐ๋์๋๋ฐ๋ Git์ด Base
์ ๋น๊ตํด์ ๋ฐ๋ ์ํ๋ก merge ํ๊ฒ์ ์ ์ ์๋ค. (B6๋ก ๋ฐ๋)
์ธ๋ฒ์งธ ์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก Target
์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ mergeํด์ ์๋ก์ด ํ์ผ์ด C4๋ก ๋ฐ๋์์์ ์ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค ๋ฒ์งธ ์ค์ด merge conflict
๊ฐ ์ผ์ด๋๋ ๊ณผ์ ์ด๋ค! Source
์ "D3"์ Target
์ "D4"๊ฐ Base๋ ๋น๊ตํด์ ๋ชจ๋ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ๊ธฐ ๋๋ฌธ์ Git์ ๋ณํฉ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ์ด๋ค ๊ฑธ๋ก merge ํด์ผํ ์ง ๊ฒฐ์ ํ์ง ๋ชปํ๋ค.
๋ง์ง๋ง์ผ๋ก ๋ค์ฏ ๋ฒ์งธ์ ๊ฐ์ด Source
์ Target
๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ด ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ ์ถฉ๋์ด ์ผ์ด๋์ง ์๊ณ ๋ณ๊ฒฝ๋ ์ฌํญ์ผ๋ก ๋ณํฉ์ด ์ด๋ฃจ์ด์ง๋ค.
์ด๋ ต๋ค ๊น
๊ณ ํ๋ค ๋ฐฐ