๐ Git์ด๋?
ํ๋ก๊ทธ๋๋ฐ ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ
( ์ปดํจํฐ์ ์ค์น๋๋ค )
Git์ ํ์์ฑ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ด๋ฃจ์ด์ง ์ฝ๋(์์ค์ฝ๋)์ ๋ฒ์ ์ ๋ถ์ฌ ์ ์ฅํด์, ๋์ค์ ๋ค์ ๋ถ๋ฌ์ค๊ฑฐ๋, ๋ณ๊ฒฝ์ฌํญ์ ์ทจ์ํ ์ ์๋ค!
๋ฒ์ ์ด ๋ฌ๋ผ์ง ์ฝ๋๋ผ๋ฆฌ ๋น๊ตํ ์ ์๋ค.
๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๋์์ ์์
์ํ ์ ์๊ณ , ๋ค์ํ ์ฝ๋๋ฅผ ์์ฑํ ํ์ ๊ฐ์ฅ ์ข์ ๊ฒ์ ๋ํ ์ฝ๋๋ก ์ค์ ํ ์ ์๋ค
ํ๋ก๊ทธ๋จ์ ์
๋ฐ์ดํธ, ๋ฐฐํฌํ๋ ๊ณผ์ ์ด ๊ฐ๋จํ๋ค
๐ GitHub๋?
Git์์ ๋ง๋ค์๋ ๋ฒ์ ์, ์น์ ์
๋ก๋ ํด์ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ ์๋น์ค
GitHub์ ํ์์ฑ
์ธ์ ์ด๋์๋ ์๊ฒฉ ์ ์ฅ์(Github์ ์ฌ๋ ค์ง ์ฝ๋)๋ฅผ ๊ฐ์ ธ์, ํ๋ก๊ทธ๋จ์ ์์ ํ ์ ์๋ค
Git GUI
Git ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , GUI๋ก Git์ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋ก๊ทธ๋จ
Git ์ค์นํ๊ธฐ
์๋์ฐ10 / https://git-scm.com/
Git
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 ์ฌ์ฉ๋ฒ
๊ฐ์ ํ๊ธฐ
GitHub: Where the world builds software
GitHub is where over 56 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...
github.com
์๋ก์ด ์๊ฒฉ ์ ์ฅ์ ๋ง๋ค๊ธฐ
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 <ํ์ผ>