
[]: ์๋ต ๊ฐ๋ฅ<>: ์ง์  ์
๋ ฅGit์ด๋ ๋ฒ์  ๊ด๋ฆฌ ์์คํ
์ด๋ค. ( Version Control System, vcs )
์ค๋
์ท๋ฐฉ์์ ์ด์ฉํ๋ค.
GitHub์ Git์ ํธ์คํ
 ์ฌ์ดํธ์ด๋ค.
working: ์ค์ ๋ก ํ์ผ๋ค์ด ์กด์ฌํ๋ ์์
๊ณต๊ฐ์ ๋งํ๋ค.stage: ์์๋ก ์ ์ฅ๋๋ ๊ณต๊ฐ์ ๋งํ๋ค.repository: ๋ฒ์ ์ ํ์ผ๋ค์ ๊ด๋ฆฌํ๊ณ  ์ ์ฅํ๋ ๊ณต๊ฐ์ ๋งํ๋ค.untracked: ํ๋ฒ๋ stage๋ repository์ ๋ฑ๋ก๋์ง ์์ ํ์ผ์ ๋งํ๋ค.tracked: ์ด๋ฏธ stage๋ repository์ ๋ฑ๋ก๋ ํ์ผ์ ๋งํ๋ค.unmodified: tracked์ด๋ฉด์ ์์ ๋๊ณ  ์์ ๋ ๋ด์ฉ์ ๋ฑ๋กํ์ง ์์ ์ํ๋ฅผ ๋งํ๋ค.modified: >> ์ ๋ ๋ญ์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์๋ฏธํ๋ค.
์๋ฌด๋ฐ ์กฐ์์ ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์ต์  ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค.
์ปค๋ฐ์ ํ์ผ์ ๋ณํ๋ฅผ ๊น ์ ์ฅ์์ ์๊ตฌ์ ์ผ๋ก ๊ธฐ๋กํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
HEAD + stage => ์๋ก์ด ์ปค๋ฐ๊ฐ repository๋ง๋ค ์์ฑ์์ ์ด๋ฉ์ผ์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ๊ฐ ๋ฑ๋กํ๊ธฐ ๊ท์ฐฎ์ ๋ --global๋ก ๋ฑ๋กํด๋๋ฉด ์๋์ผ๋ก ๊ธฐ๋ณธ ์ ์ ์ ์ด๋ฉ์ผ์ด ๋ฑ๋ก๋๋ค.
git configgit config --global user.name <name>git config --global user.email <email>[<location>]git์์ ๋ฒ์ ์ ๊ด๋ฆฌํด์ฃผ๋ ํด๋๋ก ๋ง๋๋ ๋ช
๋ น์ด์ด๋ค.
git init [๊ฒฝ๋ก]๋ฅผ ์
๋ ฅํด์ฃผ๋ฉด .gitํ์ผ์ด ์๊ธฐ๋ฉฐ ํด๋น ํ์ผ์ ํ์ฌ ํด๋์ ๋ฒ์ ์ ๋ํ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด๋ค.
ํ์ฌ ํ์ผ๋ค์ ์ํ๋ฅผ ๋ณด์ฌ์ค๋ค.
untracked, tracked, modified, unmodified ๋ฑ์ ์ํ๋ฅผ ๋ณด์ฌ์ค๋ค.
<location>์ ํด์ค ํ์ผ๋ค์ stage๊ณต๊ฐ(์์๊ณต๊ฐ)์ผ๋ก ์ฎ๊ธฐ๋ ๋ช
๋ น์ด์ด๋ค.
<file-name>state์ ์๋ ํ์ผ์ working์ผ๋ก ์ด๋ํ๋ ๋ช
๋ น์ด์ด๋ค.
์ฆ, git add๋ฅผ ์ทจ์ํ๋ ๋ช
๋ น์ด๋ค.
.์ผ๋ก ๋ชจ๋  ํ์ผ์ ์๋๊ณ  ๋ช
์ํ ํ์ผ๋ง ๊ฐ๋ฅํ๋ค.stage์ ์๋ ํ์ผ๋ค์ repository๋ก ์ฎ๊ธฐ๋ ๋ช
๋ น์ด์ด๋ค.
์ฌ๊ธฐ์ ๋ฐ๋์ stage์ ํ์ผ์ด ์์ด์ผ ํ๋ฉฐ, ๋ฉ์์ง๊ฐ ์์ด์ผ ํ๋ค.
-a: add๋ฅผ ์๋์ผ๋ก ํด์ฃผ๊ณ  ์ปค๋ฐ์ ํ๋ ์ต์
 ๊ฐ-m: ๊ฐ๋จํ๊ฒ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ ์ต์
 ๊ฐ--allow-empty-message: ๋ฉ์์ง๋ฅผ ๋น์๋๊ณ  ์ปค๋ฐ์ ํ์ฉํ๋ ์ต์
 ๊ฐ-v: ๋ณ๊ฒฝ์ฌํญ์ ๋ฉ์์ง์ ์ถ๊ฐํด์ค๋ค.์ปค๋ฐ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด์ด๋ค.
--oneline: ํ์ค๋ก ๊ฐ๋จํ๊ฒ ๋ก๊ทธ๋ฅผ ๋ณด๋ ์ต์
 ๊ฐ--graph: ๊ทธ๋ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ต์
 ๊ฐgit diff: working๊ณผ stage ๋น๊ตgit diff head: HEAD์ state ๋น๊ตgit remote add <์๊ฒฉ ์ ์ฅ์ ๋ณ์นญ> <์๊ฒฉ ์ ์ฅ์ URL>: ์๊ฒฉ ์ ์ฅ์ ์ฐ๊ฒฐgit remote: ์๊ฒฉ ์ ์ฅ์ ๋ณ์นญ ์ถ๋ ฅgit remote -v: ์๊ฒฉ ์ ์ฅ์ ๋ชฉ๋ก ์ถ๋ ฅgit remote rename <๋ณ๊ฒฝ์ > <๋ณ๊ฒฝํ>: ์๊ฒฉ ์ ์ฅ์ ๋ณ์นญ ๋ณ๊ฒฝgit remote show <์๊ฒฉ ์ ์ฅ์ ๋ณ์นญ>: ๋ฑ๋ก๋ ์๊ฒฉ ์ ์ฅ์์ ์์ธ๋ด์ฉ ์ถ๋ ฅgit remote rm <์๊ฒฉ ์ ์ฅ์ ๋ณ์นญ>: ๋ฑ๋ก๋ ์๊ฒฉ ์ ์ฅ์ ์ ๊ฑฐ๋ก์ปฌ ์ ์ฅ์์ ์ปค๋ฐํ ๋ด์ฉ์ ์๊ฒฉ ์ ์ฅ์์ ๋๊ธฐํํ๋ ๋ช ๋ น์ด
git push <์๊ฒฉ ์ ์ฅ์ ๋ณ์นญ> <๋ธ๋์น>[:<์๋ก์ด ๋ธ๋์น ์ด๋ฆ>]  
-u: ์
์คํธ๋ฆผ ์ค์ 
git push origin --delete <์๊ฒฉ ๋ธ๋์น ์ด๋ฆ>: ์๊ฒฉ ๋ธ๋์น ์ญ์ 
git push --set-upstream origin master: ๋ก์ปฌ๊ณผ ์๊ฒฉ ์ ์ฅ์์ master๋ธ๋์น๋ฅผ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ๋ช
๋ น์ด
<url> <location>์๊ฒฉ ์ ์ฅ์์ ํ์ผ๋ค๊ณผ .gitํ์ผ์ ์ ํด์ค ์์น์ ๋ณต์ฌํด์ฃผ๋ ๋ช
๋ น์ด์ด๋ค.
๊ธฐ์กด ์ค์ ๊ฐ๊น์ง ๋ชจ๋ ๋ณต์ ๋๋ค.
( ์๊ฒฉ ์ ์ฅ์ ๋ณ์นญ, user.name, user.email ๋ฑ๋ฑ )
์๊ฒฉ ์ ์ฅ์ ๋ฑ๋ก ํ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ , ์ฌ์ฉ ์ ์๊ฒฉ ์ ์ฅ์์ ๊ฐฑ์ ๋ ๋ด์ฉ์ ๋ด๋ ค๋ฐ๋๋ค. ( ์๋ ๋ณํฉ )
์๊ฒฉ ์ ์ฅ์ ๋ฑ๋ก ํ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ , ์ฌ์ฉ ์ ์๊ฒฉ ์ ์ฅ์์ ๊ฐฑ์ ๋ ๋ด์ฉ์ ๋ด๋ ค๋ฐ๋๋ค. ( FETCH_HEAD๋ผ๋ branch์ ๋ด๋ ค๋ฐ์ )
git pull๊ณผ ๋ค๋ฅด๊ฒ ์ง์  ๋ณํฉ์ ํด์ค์ผํ๋ค.
( git merge origin/master ๋ช
๋ น์ด ์ฌ์ฉ )
ํ์ฌ ๋ธ๋์น ๋ชฉ๋ก๊ณผ ์ฌ์ฉ ๋ธ๋์น๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด
git branch <branch-name> [<commit-id>]
commit-id ์๋ต ์ HEAD ํฌ์ธํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑ
-v: ๋ธ๋์น ์ธ๋ถ์ฌํญ์ ๋ณด์ฌ์ฃผ๋ ์ต์
 ๊ฐ
-r: ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ์ต์
 ๊ฐ
-vv: ํธ๋ํน ๋ธ๋์น ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ์ต์
 ๊ฐ
-d: ๋ก์ปฌ ๋ธ๋์น ์ญ์ 
-D: ๋ก์ปฌ ๋ธ๋์น ๊ฐ์  ์ญ์ 
--merged: ๋ณํฉ๋ ๋ธ๋์น๋ *๋ก ํ์ํด์ฃผ๋ ์ต์
 ๊ฐ
git branch -u origin/<branch-name>: ๊ธฐ์กด ๋ธ๋์น์ ์
์คํธ๋ฆผ ์ง์  ์ฐ๊ฒฐ
<branch-name>๋ธ๋์น ์์ฑ์ ๊ธฐ์ค์ ์ด ๋ ์ปค๋ฐ ์์ด๋๋ฅผ ์ถ๋ ฅํ๋ ๋ช
๋ น์ด
git checkout <branch-name>: ํด๋น ๋ธ๋์น๋ก ์ด๋ ( working ๋ณ๊ฒฝ )
git checkout -- <file-name>: ํด๋น ํ์ผ๋ก ์ด๋ ( ํด๋น ํ์ผ๋ง ์ต์  ์ปค๋ฐ์ํ๋ก ๋๋๋ ค์ค )
git checkout <commit-id>: ์ปค๋ฐ ์์ด๋์ ํด๋นํ๋ ์ปค๋ฐ์ผ๋ก ์ด๋
git checkout --track origin/<branch-name>: ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๋ธ๋์น๋ก ์
์คํธ๋ฆผํ๋ ๋ช
๋ น์ด
( ์๊ฒฉ ๋ธ๋์น๋ฅผ ๋ก์ปฌ ๋ธ๋์น๋ก ๊ฐ์ ธ์ค๋ ๋ช
๋ น์ด )
git checkout -b <new-branch-name> origin/<branch-name>: ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๋ธ๋์น๋ก ๋ณต์ฌํ๋ ๋ช
๋ น์ด
-: ์ด์  ๋ธ๋์น๋ก ์ด๋ํ๋ค.
-b: ๋ธ๋์น๋ฅผ ์์ฑ๊ณผ ๋์์ ํด๋น ๋ธ๋์น๋ก ์ด๋
ํ์ฌ ๋ณ๊ฒฝ ๋ด์ฉ์ ์คํํํ์ ์์ ์ ์ฅ์์ ์ ์ฅํด๋๋ ๋ช ๋ น์ด
git stash save "<message>": ์์ ์ ์ฅ์์ ๋ฉ์์ง๋ก ๊ธฐ๋กํ๋ ๋ช
๋ น์ด
git stash list: ์์ ์ ์ฅ์ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ๋ช
๋ น์ด
git stash show [-p]: ์์ ์ ์ฅ์์ ํ์ฌ์ ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ช
๋ น์ด ( -p๋ ๋ ์์ธํ๊ฒ ๋ณด์ฌ์ค )
git stash pop: ์์ ์ ์ฅ์์ ๊ฐ์ฅ ์ต๊ทผ๊ฐ์ ๊ฐ์ ธ์ค๊ณ  ์ฑ๊ณตํ๋ฉด ์คํ์์ ์ ๊ฑฐํ๋ ๋ช
๋ น์ด
git stash branch <branch-name>: ๋ธ๋์น๋ฅผ ์๋ก ์์ฑํ๊ณ  ๋ด์ฉ์ ์ฑ์๋ฃ์ ( ์ฑ๊ณต์ stash ์ ๊ฑฐ )
git stash apply <stash-name>: ํด๋น stash๋ฅผ ๋ณต์ฌํ๊ณ  ์คํ์์ ์ ๊ฑฐํ์ง ์์
--index: stash์์ ๋ถ๋ฌ์ฌ๊ฒฝ์ฐ working๊ณผ stage๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ  ๋ชจ๋ working์ ๋ฃ์ด์ ๋๋ ค์ค
ํด๋น ์ต์
์ ๋ถ์ฌํ๋ฉด working๊ณผ stage๋ฅผ ๊ตฌ๋ถํด์ ๋ถ๋ฌ์จ๋ค.
<branch-name>-e: 3-way ๋ณํฉ ์ ๋ณํฉ ๋ฉ์์ง๋ฅผ ์ง์  ์์ฑํ  ์ ์๊ฒ ํด์ฃผ๋ ์ต์
 ๊ฐ ( --edit )--abort: conflict ์ดํ์ ์คํํ๋ฉด ๋ณํฉ์ ์ทจ์์์ผ์ฃผ๋ ์ต์
 ๊ฐSHA1์ด๋ผ๋ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋์ง ์๊ณ  ์ 7์๋ฆฌ์ ๋๋ง ์ฌ์ฉํด๋ ๊ฒน์น์ง ์๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์ ๋ถ๋ฅผ ๋ณต์ฌํด์ ์ฌ์ฉํ  ํ์ ์๋ค.
๊น์ ์ปค๋ฐ์ ์ด์  ์ปค๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์ปค๋ฐ์ ๋ง๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์ต์ ์ปค๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ปค๋ฐ์ ํด์ผ ํ๋ค.
๊ณต๋ ๊ฐ๋ฐ์ผ ๊ฒฝ์ฐ์ push๋ฅผ ํ  ๋๋ ๋์์ ์์
ํ๊ณ  ๊ฐ์์ ์์
 ๋ด์ฉ์ ์ปค๋ฐ ํ๊ฒ ๋๋ฉด ์ดํ์ pushํ๋ ๊ฐ๋ฐ์๋ ์ต์  ์ปค๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก pushํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋๊ฒ ๋๋ค.
๋ฐ๋ผ์ push์ ์๋ pull or fetch๋ฅผ ์ด์ฉํด์ ์ต์  ์ปค๋ฐ์ ์ ์ฉํด์ผ ํ๋ค. 
๋ธ๋์น๋ฅผ ๋ง๋๋ ๊ฒ์ ์ค์  ์ฝ๋๋ฅผ ๋ณต์ฌํ๋ ๊ฒ์ด ์๋ ์์ ์์น์ ๊ฐ์ ํด๋๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
๋ธ๋์น๋ฅผ ๋ง๋๋ ๊ธฐ์ค์ ๋ธ๋์น or ์ปค๋ฐ์ ๊ธฐ์ค์ผ๋ก ์๋ก์ด ๋ธ๋์น๋ฅผ ๋ง๋ ๋ค.
๋ธ๋์น๋ฅผ ์์ฑํ๋ค๊ณ  ์ฆ์ ์๋ก์ด ๋ธ๋์น๊ฐ ์์ฑ๋๋ ๊ฒ์ ์๋
์ต์ด์๋ ํฌ์ธํฐ๋ง ์์ฑ๋๊ณ  ์ดํ์ ์์ฑํ ๋ธ๋์น์์ ์ปค๋ฐ์ ํ๋ฉด ์๋ก์ด ๋ธ๋์น๊ฐ ์์ฑ๋๋ ๊ฒ์ด๋ค.
๋ธ๋์น๋ฅผ ์ญ์ ํ ๋ ์กฐ๊ฑด์ ํ์ฌ ๋ธ๋์น๊ฐ ์๋๊ณ , ์์ ์ฌํญ์ด ์์ด์ผ ํ๋ค.
์ฒดํฌ์์์์๋ HEAD ํฌ์ธํฐ๊ฐ ๊ฐ์ด ์ด๋๋๋ค.
์ฒดํฌ์์์ ์๋ working์ ์ ๋ฆฌํ๊ณ  ์ด๋ํด์ผ ํ๋ค.
๋ธ๋์น ์ด๋ ์์ฒด๊ฐ working์ ๋ฐ๊พธ๋ ํ์์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๋ฐ๊ฟจ๋ ์ํ๊ฐ ์ ์ง๋  ์ ์๋ค. ๋ฐ๋ผ์ ์ปค๋ฐ, ์คํ์ ๊ฐ์ ํ์๋ก ๊ธฐ์กด ์ํ๋ฅผ ์ ์ฅํด๋๊ณ  ์ด๋ํด์ผ ํ๋ค.
HEAD๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ ์ ํ๋ ๋ธ๋์น์ ์ต์  ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์
๋๋ค.
์ปค๋ฐ, ๋ธ๋์น ์์ฑ ๋ฑ์ ์ปค๋ฐ์ ์ด์ฉํด์ ์๋ก์ด ๊ฒฐ๊ณผ๋ฌผ์ ์์ฑํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค. ( ์ฆ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ฑ๋ฅ์ ์ผ๋ก ์ ๋ฆฌํจ )
HEAD^n: ํ์ฌ HEAD๋ฅผ ๊ธฐ์ค์ผ๋ก n๋ฒ์งธ ์ด์ ์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํดHEAD~n: ํ์ฌ HEAD๋ฅผ ๊ธฐ์ค์ผ๋ก n๋ฒ์งธ ์ด์ ์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํด๋ก์ปฌ ๋ธ๋์น์ ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น์์ ๋งค์นญ์ ์ ์คํธ๋ฆผ ํธ๋ํน์ด๋ผ๊ณ ํฉ๋๋ค.
ํธ๋ํน ๋ธ๋์น๋ ์๊ฒฉ ์ ์ฅ์ ๋ธ๋์น์ ๋ก์ปฌ ๋ธ๋์น๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ ์ค๊ฐ ๋ค๋ฆฌ ์ญํ ์ ํฉ๋๋ค.
์๊ฒฉ ์ ์ฅ์๋ฅผ ํด๋ก  ํ๋ค๊ณ  ํด์ ๋ชจ๋  ๋ธ๋์น๊น์ง ํด๋ก  ๋์ง ์๋๋ค.
ํจ์จ์ฑ์ ์ด์ ๋ก ์ํ๋ ๋ธ๋์น๋ ์ง์  ์
์คํธ๋ฆผ์ ํด์ค์ ๋ก์ปฌ๊ณผ ์๊ฒฉ ๋ธ๋์น๋ฅผ ์ฐ๊ฒฐ์์ผ์ค์ผ ํ๋ค.
๋ธ๋์น๋จ์๋ก ๋ณํฉ์ ์คํํฉ๋๋ค.
๋ณํฉ์ Fast-Forward ๋ณํฉ๊ณผ 3-way ๋ณํฉ์ด ์กด์ฌํฉ๋๋ค.
๋ณํฉ์ ์คํํ๋ ๋ธ๋์น์ ๊ฒฐ๊ณผ๋ฌผ์ด ์๊น๋๋ค.
๋ธ๋์น๊ฐ ์ผ์ง์ ์ผ๋ก ํ๋์ ์ค๊ธฐ๋ก ์ด์ด์ง ์ํ์์ ๋ณํฉํ ๊ฒฝ์ฐ ์ ์ฉํ๋ ๋ฐฉ์
๋ธ๋์น1, ๋ธ๋์น2, ๋ ๊ฐ์ ๋ธ๋์น์ ๊ณตํต๋ ์์์ปค๋ฐ 3๊ฐ์ง๊ฐ ํฉ์ณ์ง๋ ๋ณํฉ์ ์ฌ์ฉํ๋ ๋ฐฉ์
conflict์ด ์์ ๊ฒฝ์ฐ์๋ ์๋์ผ๋ก merge ์ปค๋ฐ ๋ก๊ทธ๊ฐ ๋จ๋๋ค.
conflict์ด ์์ ๊ฒฝ์ฐ์๋ ์ง์  ์ถฉ๋๋ ๋ถ๋ถ์ ์์ ํ ํ ์ปค๋ฐํด์ค์ผ ํ๋ค.
๋ง์ฝ conflict ๋ฐ์ํ ๊ฒฝ์ฐ์๋ VSCode๋ก ๋ค์ด๊ฐ์ ํ์ธํด ๋ณด๋ฉด ์ฝ๊ฒ ์ถฉ๋ ๋ถ๋ถ์ ์์ ํ  ์ ์๋๋ก ๋์์ค๋ค.