๐ Git์ด๋?
ํ๋ก๊ทธ๋๋ฐ ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ
( ์ปดํจํฐ์ ์ค์น๋๋ค )
Git์ ํ์์ฑ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ด๋ฃจ์ด์ง ์ฝ๋(์์ค์ฝ๋)์ ๋ฒ์ ์ ๋ถ์ฌ ์ ์ฅํด์, ๋์ค์ ๋ค์ ๋ถ๋ฌ์ค๊ฑฐ๋, ๋ณ๊ฒฝ์ฌํญ์ ์ทจ์ํ ์ ์๋ค!
๋ฒ์ ์ด ๋ฌ๋ผ์ง ์ฝ๋๋ผ๋ฆฌ ๋น๊ตํ ์ ์๋ค.
๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๋์์ ์์
์ํ ์ ์๊ณ , ๋ค์ํ ์ฝ๋๋ฅผ ์์ฑํ ํ์ ๊ฐ์ฅ ์ข์ ๊ฒ์ ๋ํ ์ฝ๋๋ก ์ค์ ํ ์ ์๋ค
ํ๋ก๊ทธ๋จ์ ์
๋ฐ์ดํธ, ๋ฐฐํฌํ๋ ๊ณผ์ ์ด ๊ฐ๋จํ๋ค
๐ GitHub๋?
Git์์ ๋ง๋ค์๋ ๋ฒ์ ์, ์น์ ์
๋ก๋ ํด์ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ ์๋น์ค
GitHub์ ํ์์ฑ
์ธ์ ์ด๋์๋ ์๊ฒฉ ์ ์ฅ์(Github์ ์ฌ๋ ค์ง ์ฝ๋)๋ฅผ ๊ฐ์ ธ์, ํ๋ก๊ทธ๋จ์ ์์ ํ ์ ์๋ค
Git GUI
Git ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , GUI๋ก Git์ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋ก๊ทธ๋จ
Git ์ค์นํ๊ธฐ
์๋์ฐ10 / https://git-scm.com/
๋ฆฌ๋ ์ค
// apt
sudo apt install git
// yum
sudo yum install git
๐ Git์ ๊ตฌ์กฐ
1. Working Directory (์์
์์ญ)
์ค์ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ
.git ์ด๋ ฅ๊ณผ ๊ด๋ จ ์ ๋ณด๊ฐ ์ ์ฅ ๋ .git์ ์ ์ธํ ๋ชจ๋ ์์ญ
์ค์ ์ฝ๋์ ์ถ๊ฐ, ์์ , ์ญ์ ์์
์ด ์ด๋ฃจ์ด์ง๋ ์์ญ
2. Repository (์ ์ฅ์)
ํ์ผ, ํด๋๋ฅผ ๋ณ๊ฒฝ ์ด๋ ฅ๋ณ๋ก(๋ฒ์ ๋ณ๋ก) ์ ์ฅํด ๋๋ ๊ณณ
.git ํด๋์ ์กด์ฌํ๋ฉฐ, ๋๊ฐ์ง๋ก ๋๋๋ค.
Local Repository : ๊ฐ์ธ PC์ ํ์ผ์ด ์ ์ฅ๋๋ ๊ฐ์ธ ์ ์ฅ์
Remote Repository : ์๊ฒฉ ์ ์ฅ์ ์ ์ฉ ์๋ฒ์์ ๊ด๋ฆฌ๋๋ฉฐ, ์ฌ๋ฌ ์ฌ๋๋ค๊ณผ ๊ฐ์ด ๊ณต์ ๋ ๊ฐ๋ฅํ ์ ์ฅ์
3. Index (Staging Area)
Working Directory(์์
์์ญ)์์ Repository(์ ์ฅ์)๋ก ์ ๋ณด ์ ์ฅ ์ ์ค๋นํ๋ ๊ณณ
ํ์ผ ์ํ๋ฅผ ๊ธฐ๋ก, ์คํ
์ด์งํ๋ค๊ณ ํํํ๋ค.
.git/index ํ์ผ๋ก ๊ด๋ฆฌ๋๋ค.
git add : Working Directory(์์
์์ญ)์์ Index ์์ญ์ผ๋ก ์ ๋ณด๊ฐ ์ ์ฅ๋๋ค.
git commit : Index์์ญ์์ Repository(์ ์ฅ์)๋ก ์ ๋ณด๊ฐ ์ ์ฅ๋จ.
4. Stash
์์์ ์ธ ์ฌํญ์ ์ ์ฅํ๋ ์์ ์์ญ
๐ Git ์ฌ์ฉ๋ฒ
ํ์ฌ ํด๋๋ฅผ Git์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ง์ ํ๊ธฐ
git init
์์์ ์ง์ ๋ ํ๋ก์ ํธ๋ฅผ ๋ณต์ฌํ์ฌ, ์๋ก์ด ์ฌ์ด๋ ํ๋ก์ ํธ(branch) ๋ง๋ค๊ธฐ
git branch <๋ธ๋์น>
gb <๋ธ๋์น>
ํด๋น ๋ธ๋์น์ ์ ์ํ๊ธฐ
git checkout <๋ธ๋์น>
gco <๋ธ๋์น>
ํ์ฌ ์ฌ์ฉํ๋ ๋ธ๋์น ํ์ธํ๊ธฐ
git branch
๋ธ๋์น ์ ๊ฑฐํ๊ธฐ
git branch -d <๋ธ๋์น์ด๋ฆ>
๋ธ๋์น ํฉ์น๊ธฐ
// ํ์ผ ์คํ
์ด์ง
ga .
// ์ปค๋ฐ
gc
// ๋ธ๋์น ์ด๋
gco <๋ฎ์ด์ฐ์ผ ๋ธ๋์น>
// ๋ธ๋์น ๋ณํฉ
gm <์ปค๋ฐID>
ํ์ฌ ์์ ๋ด์ฉ, ๊นํ๋ธ ๋ธ๋์น์ ์ ๋ก๋ํ๊ธฐ
git push origin <๋ธ๋์น>
Git ์ค์ ํ์ผ ์กฐํ
git config
gcf
Git ์ด๊ธฐ ์ค์
git config --global user.name "์ด๋ฆ"
git config --global user.email "์ด๋ฉ์ผ"
git config --global user.password "ํ ํฐ"
// git >>> g ๋ก ์๋ต ๊ฐ๋ฅ
Git ํ์ฌ ์ํ ์กฐํ
git status
// ์ํ ์ค๋ช
// On branch : ํ์ฌ ์์
์ค์ธ branch
// Untracked : git์ด ๊ด๋ฆฌํ๊ณ ์์ง ์์ ํ์ผ
// Tracked : git์ด ๊ด๋ฆฌํ๊ณ ์๋ ํ์ผ, ๋ณ๋ ์ฌํญ์ ๊ฐ์งํด ์ํ๋ฅผ ํ์
ํ๋ค
Staged : ํ์ผ ์์ ํ staging area(Index)์ ์ฌ๋ผ๊ฐ ์๋ ์ํ
Unmodified : ์ด์ ๊ณผ ๋ฐ๋๊ฒ ์๋ ์ํ
Modified : ์ด์ ๊ณผ ๋ฐ๋๊ฒ ์๋ ์ํ
์์ ํ๊ณ ์๋ ํ์ผ๋ค, ์ ์ฅ์์ ์ ์ฅํ๊ธฐ ์ํด ์ค๋นํ๊ธฐ (Working Directory >> Index)
// Staging area(index)์ ํ์ผ ์ ์ฅ
git add <ํ์ผ>
// Staging area(index)์ ๋ชจ๋ ํ์ผ ์ ์ฅ
git add .
git add --all
git add -A
ga .
Staging area(Index)์ ์ถ๊ฐ๋ ํ์ผ ์ ๊ฑฐํ๊ธฐ
git rm <์ต์
> <ํ์ผ>
//์ต์
--cached : Staging area์ ์ถ๊ฐ๋ ํ์ผ์ ์ ๊ฑฐ (working directoryํ์ผ์ ์ ์ง)
-f, --force : ๊ฐ์ ์ญ์
--ignore-unmatch : ์ญ์ ํ๋ ค๋ ํ์ผ์ด ์์ ๋ ๋ฐ์ํ๋ ์๋ฌ ๋ฌด์
๋ณ๊ฒฝ์ฌํญ์ ํ์ ํ๊ณ , ์๋ก์ด ๋ฒ์ (์ปค๋ฐ) ๋ง๋ค๊ธฐ
git commit <์ต์
>
//์ต์
-m <์ค๋ช
๋ฉ์ธ์ง> : ๋ณ๊ฒฝ๋ ํ์ผ์ ์ค๋ช
๋ฉ์ธ์ง์ ํจ๊ป, ์ปค๋ฐ์ผ๋ก ์ ์ฅํ๋ค.
-a : ์๋์ผ๋ก add ๋ช
๋ น์ด ์คํํ, ์ปค๋ฐ์ผ๋ก ์ ์ฅํ๋ค.
-v : ์ค๋ช
๋ฉ์ธ์ง์ diff ๋ด์ฉ์ ํฌํจ์ํจ๋ค.
--amend : ์ต์ ์ค๋ช
๋ฉ์ธ์ง๋ฅผ ์์ ํ๋ค.
์ ์ฅ์ ๊ธฐ๋ก ํ์ธํ๊ธฐ
git log <์ต์
>
//์ต์
-p : ๋ณ๊ฒฝ๋ ์ฌํญ ํ์ธ
--oneline : ์ค๋ช
๋ฉ์ธ์ง๋ง ํ์ค์ฉ ํ์
--all : ๋ชจ๋ ๋ธ๋์น ๊ธฐ๋ก์ ํ์
--graph : ๋ธ๋์น๋ฅผ ํธ๋ฆฌํ์ ๊ทธ๋ํ๋ก ํ์
--pretty=<์ํ๋์ ๋ณด> : ๊ธฐ๋ก์์ ์ํ๋ ์ ๋ณด๋ง ๋ฐ๋ก ํ์
( https://git-scm.com/docs/pretty-formats )
๋ ํ์ผ์ ์ฐจ์ด์ ํ์ธํ๊ธฐ
git diff <์ต์
> <ํ์ผ1> <ํ์ผ2>
git diff <์ต์
> <์ ์ฅ์1> <์ ์ฅ์2>
//์ต์
--staged : ๋ง์ง๋ง ์ ์ฅ์์ staging area์ ์ฐจ์ด ํ์ธ
VSCode๋ก ๋ ํ์ผ์ ์ฐจ์ด์ ํ์ธํ๊ธฐ
// git ์ค์ ํ์ผ์ด๊ธฐ
git config --global -e
// diff ๋ช
๋ น์ ์ฌ์ฉํ ๋, vscode ์ฌ์ฉํ๋๋ก ์ง์ ํด์ฃผ๊ธฐ
[diff]
tool = vscode
[difftool "vscode"]
cmd = code --wait --diff $LOCAL $REMOTE
// vscode์์ ์ฐจ์ด์ ์ฐพ๊ธฐ
git difftool
์์ ๋ฒ์ ์ผ๋ก ๋๋์๊ฐ๊ธฐ
git reset <์ต์
> <๋ฒ์ ID>
//์ต์
--soft : ์ ์ฅ์๋ง ๊ฐ์ ธ์จ๋ค
--mixed : Staging area, ์ ์ฅ์๋ง ํด๋น ๋ฒ์ ์์ ๊ฐ์ ธ์จ๋ค
--hard : ์์
์์ญ, Staging area, ์ ์ฅ์ ๋ชจ๋ ํด๋น ๋ฒ์ ์์ ๊ฐ์ ธ์จ๋ค
HEAD^ : ๋ฐ๋ก ์ด์ ๋ฒ์ ์ ์ ์ฅ์ ๊ฐ์ ธ์ค๊ธฐ
HEAD~2 : 2๋จ๊ณ ์ด์ ๋ฒ์ ์ ์ ์ฅ์ ๊ฐ์ ธ์ค๊ธฐ
๋ค๋ฅธ ๋ฒ์ ๋ณด๋ค ์ค์ํ ๊ฒฝ์ฐ์ ํ๊ทธ ๋ฌ์ ๊ตฌ๋ถํด์ฃผ๊ธฐ
git tag <ํ๊ทธ์ด๋ฆ> <๋ฒ์ ID>
// ์ฌ์ฉ๋ฒ
git tag : ํ๊ทธ ๋ฆฌ์คํธ ํ์
git show <ํํฌ์ด๋ฆ> : ํ๊ทธ ๋ด์ฉ ํ์
git ๋ช ๋ น๋ก๊ทธ ํ์ธํ๊ธฐ
git reflog
// ๋ฐ๋ก ์ด์ ์ ์ฌ์ฉํ ๋ช
๋ น์ด๋ค์ ํ์ธํ ์ ์๊ณ , reset๊ณผ ํจ๊ป์ฌ์ฉํด ๋๋๋ฆด ์๋ ์๋ค.
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
57e53a0 HEAD@{2}: modify : bug ์์
[...]
Github ์ฌ์ฉ๋ฒ
๊ฐ์ ํ๊ธฐ
์๋ก์ด ์๊ฒฉ ์ ์ฅ์ ๋ง๋ค๊ธฐ
1. ๋ฒํผ ํด๋ฆญ
2. ์ด๋ฆ, ์ค๋ช ๋ฑ ์ค์ ์ง์
3. ์์ฑ ์๋ฃ!
ํ์ฌ ํด๋๊ฐ, ์๊ฒฉ ์ ์ฅ์์ ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํ๊ธฐ
git remote -v
grv
๋ก์ปฌ ์ ์ฅ์(๋ด ์ปดํจํฐ)๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ์ ๋ก๋ํ๊ธฐ
git push <์ต์
> <์ ์ฅ์> <๋ธ๋์น>
// ์ต์
-u : ๊ธฐ๋ณธ์ผ๋ก ์
๋ก๋ ๋๋ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ ์ง์ ํ๊ธฐ
์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๋ค์ด๋ก๋ํ๊ธฐ
git pull
gp
์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๋ค์ด๋ก๋ํ๊ณ , ์๋ก ์ฐ๊ฒฐํด์ค๋ค.
git clone
์ฐ๊ฒฐ๋ ์๊ฒฉ ์ ์ฅ์ ํ์ธํ๊ธฐ
git remote
gr
๋ก์ปฌ ๋ธ๋์น ์๊ฒฉ์ ์ฅ์์ ์ ๋ก๋ํ๊ธฐ
git push --set-upstream origin <๋ธ๋์น>
์๋ก์ด Git ๊ด๋ฆฌ ํด๋ ๋ง๋ค๊ณ , ์๊ฒฉ ์ ์ฅ์ ์ฐ๋ํ๊ธฐ
// Git ๊ด๋ฆฌ ํด๋ ์ง์ ํ๊ธฐ
git init
// Git ํ๋ก์ ํธ ์ค๋ช
ํ์ผ ์ถ๊ฐํ๊ธฐ
git add README.md
// ์ฒซ๋ฒ์งธ ๋ฒ์ ๋ง๋ค๊ธฐ
git commit -m "first commit"
// main ๋ธ๋์น๋ฅผ ๋ง๋ค๊ธฐ ( -M : ๊ฐ์ )
git branch -M main
// ์๊ฒฉ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๊ธฐ
git remote add origin <์๊ฒฉ์ ์ฅ์URL>
gra origin <์๊ฒฉ์ ์ฅ์URL>
// ์๊ฒฉ์ ์ฅ์์ ํด๋ ๋ด์ฉ ์
๋ก๋ํ๊ธฐ
git push -u origin main
๊ธฐ์กด์ Git ๊ด๋ฆฌ ํด๋์, ์๊ฒฉ ์ ์ฅ์ ์ฐ๋ํ๊ธฐ
// ์๊ฒฉ์ ์ฅ์ ์ฐ๊ฒฐํ๊ธฐ
git remote add <์๊ฒฉ์ ์ฅ์ ์ด๋ฆ - ๋๋ถ๋ถ origin ์ฌ์ฉ> <์๊ฒฉ์ ์ฅ์URL>
// main ๋ธ๋์น ๋ง๋ค๊ธฐ
git branch -M main
// ์๊ฒฉ์ ์ฅ์์ ํด๋ ๋ด์ฉ ์
๋ก๋ํ๊ธฐ
git push -u origin main
์๊ฒฉ ์ ์ฅ์ ์ฐ๋ ๋๊ธฐ
git remote remove <์๊ฒฉ์ ์ฅ์>
grrm <์๊ฒฉ์ ์ฅ์>
Git์ ์ฅ์์ ์ ์ฅํ์ง ์์, ์์ธ ํ์ผ ์ค์ ํ๊ธฐ ( .gitignore )
// ๋ก๊ทธํ์ผ ์์ธ
*.log
*.bak
// README.MD ํ์ผ ์์ธ
README.MD
// node_modules ํด๋ ๋ด์ฉ๊น์ง ์ ๋ถ ์์ธ
/node_modules
Git ์ค๋ฅ
git pull
์ค๋ฅ :
Your local changes to the following files would be overwritten by merge
๋ค์ ํ์ผ์ ๋ํ ๋ณ๊ฒฝ์ฌํญ์ ๋ณํฉ(merge)ํฉ๋๋ค.
Please commit your changes or stash them before you merge
mergeํ๊ธฐ ์ ์ ๋ณ๊ฒฝ์ฌํญ์ ์ปค๋ฐํ๊ฑฐ๋ ์ ์ฅํด์ฃผ์ธ์
ํด๊ฒฐ :
1. staging ์์ญ์ ์์์ ์ฅ
git add .
2. ์ปค๋ฐ
git add.
git commit -m "<์ค๋ช
>"
3. ์์์ ์ฅ
git stash
์๊ฒฉ์ ์ฅ์ ์ด๊ธฐํํ๊ธฐ
git rm -r --cached .
์๊ฒฉ์ ์ฅ์์์ ํน์ ํ์ผ ์ญ์ ํ๊ธฐ ( gitignore ์์ ์, ์๋ ์ญ์ )
git rm -r --cached <ํ์ผ>