Git ๊ณต๋ถ์ฉ ๐
๐git ๊ธฐ์ด (mac os ๋ด์ฅ terminal or vsc terminal) ! git ๋ช ๋ น์ด -> ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๋ด๋ถ์์ ์คํ.
โ git ์์ํ๊ธฐ.
- git init: ํ๋ก์ ํธ ํ์ผ์ git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋ ์ํ๊ฐ ๋๋๋ก ํ๋ ๋ช
๋ น์ด.
ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ์์ .git (์ง์ ๊ฑด๋๋ฆฌ์ง ์์ผ๋ฏ๋ก ์จ๊น ํ์ผ ์ฒ๋ฆฌ) ํด๋๊ฐ ์์ฑ๋์ด ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ์ํ ๊ฒ ์๋ ์ ์ฅ.
- git config user.name โ์ด๋ฆโ: git ์ฌ์ฉ์ ์ด๋ฆ ์ค์ .
- git config user.email โ์ด๋ฉ์ผโ: git ์ฌ์ฉ์ ์ด๋ฉ์ผ ์ค์ .
๊ฐ์ ์ปดํจํฐ๋ผ๋ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ผ ๊ฒฝ์ฐ ์ ์ ์ด๋ฆ, ์ด๋ฉ์ผ ์ฌ์ค์ ๊ฐ๋ฅ.
โ ํน์ ๋ฒ์ ์ ์ ์ฅ = ์ปค๋ฐ(commit)
- working directory: ์ค์ ๋ก ๋ค๋ฃจ๋ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ
- staging area: ํน์ ๋ฒ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ ํ์ผ์ ๋ชจ์๋๋ ์ฅ์ (์ง๊ธ ๋น์ฅ commit ์ ๋จ๊ธฐ๊ณ ์ถ์ง ์์ ํ์ผ์ด ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ.)
- repository: ํน์ ์์ ์ staging area ๋ชจ์ต์ ์ปค๋ฐ(commit)์ผ๋ก ๋จ๊ธฐ๋ฉด ์ปค๋ฐ(commit)๋ค๋ก ์ ์ฅ๋๋ ์์ญ
commit ๊ณผ์ : ํ์ฌ ์์ ์ค์ธ working directory์์ commit์ ํ๊ณ ์ถ์ ๋ชจ๋ ํ์ผ์ staging area ํ์ผ์ ์ฌ๋ฆฐ ํ commit ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ํด๋น ์์ ์ staging area์ ์กด์ฌํ๋ ํ์ผ์ด commit ๋จ์๋ก repository์ ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋์ด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ๋จ.
โ commit ํ๋ ์ด์ ? ์์ ์ด๋ ฅ์ ๋จ๊ฒจ๋๊ณ ์ํ๋ ์์ ์ผ๋ก ์์ ๋กญ๊ฒ ์ด๋ํ๊ธฐ ์ํจ.
โ git commitํ๊ธฐ.
- git add ํ์ผ๋ช (ํ์ฅ์๊น์ง ex) .js ๋ฑ): ์ง์ ํ ํ์ผ๋ช ์ ํ๋ก์ ํธ ํ์ผ์ staging area์ ์ฌ๋ฆฌ๋ ๋ช ๋ น์ด.
- git add . : ์๋กญ๊ฒ ๋ง๋ค์ด์ง๊ฑฐ๋ ์์ ๋ ํ์ผ์ ๋ชจ๋ staging area์ ์ฌ๋ฆฌ๋ ๋ช ๋ น์ด.
- git commit -m โ์ปค๋ฐ๋ฉ์ธ์งโ: ํ์ฌ staging area ์ ์ฌ๋ผ๊ฐ ํ์ผ๋ค์ ํ๋์ commit์ผ๋ก ๋ง๋ค์ด repository์ ์ ์ฅํ๋ ๋ช
๋ น์ด.
-
git diff {commit1_id} {commit2_id}: ์ปค๋ฐ ์ฌ์ด์ ์ฐจ์ด์ ์ ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด (๋ณดํต commit id ๋ ์ ๋ค์๋ฆฌ๋ง ๋ฐ์ด.)
์์ ๋ ๋ถ๋ถ๋ง ๋ฐ์ํ์ฌ ๋ณด์ฌ์ค, ์์ ๋์ง ์์ (staging area์ ์ฌ๋ผ๊ฐ์ง ์์) ๋ถ๋ถ์ ๋ฐ์ X.
-
git reset โ{option} {commit_id or HEAD@{์ซ์}(reflog์์ ๊ธฐ๋ก๋ ํ๊ธฐ๋ฒ)}: Head ๊ฐ ๊ฐ๋ฆฌํค๋ commit์ ๋ฐ๊พธ๋ ๋ช ๋ น์ด. (๊ณตํต)
- option์ด hard ์ผ ๊ฒฝ์ฐ: working directory ๋ชจ์ต์ด ๋ณ๊ฒฝ๋จ(์ฝ๋ ๋ณ๊ฒฝ).
์ง์ commit ๋ค์ ๋ ๋ ค๋ ๊ด์ฐฎ์ ๋ ์ฃผ์ํ์ฌ ์ฌ์ฉ
- option์ด mixed ์ผ ๊ฒฝ์ฐ: working directory ๋ชจ์ต์ด ๋ณ๊ฒฝ๋์ง ์์. / staging area ๋ ํ์ฌ ๊ฐ๋ฆฌํค๋ commit ์ผ๋ก ๋ณ๊ฒฝ๋จ.
- option์ด soft ์ผ ๊ฒฝ์ฐ: working directory ๋ชจ์ต์ด ๋ณ๊ฒฝ๋์ง ์์. / staging area๋ ๊ฑด๋๋ฆฌ์ง ์์.
- option์ด hard ์ผ ๊ฒฝ์ฐ: working directory ๋ชจ์ต์ด ๋ณ๊ฒฝ๋จ(์ฝ๋ ๋ณ๊ฒฝ).
-
โ ์์ ์ํ, ๊ธฐ๋ก ํ์ธ
- git status: commit์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ง ํ์ธํ๋ ๋ช ๋ น์ด.
- git status: commit์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ง ํ์ธํ๋ ๋ช ๋ น์ด.
- git log / git history: commit์ ๊ธฐ๋ก์ ์๊ฐ ์์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด.
- git reflog: head ๊ฐ ํ๋ฒ์ด๋ผ๋ ๊ฐ๋ฆฌ์ผฐ๋ commit ๊ธฐ๋ก์ ๋ชจ๋ ๋ณด์ฌ์ฃผ๋ ๋ช
๋ น์ด.
head@{์ซ์}์ ์ซ์๊ฐ ์์์๋ก ์ต๊ทผ commit์.
โ ์ธ๋ถ ์ ์ฅ์(gitHub, gitlab ๋ฑ) ์ ์ฅ์ ์ฅ์
- ํ๋ก์ ํธ ๋ณต๊ตฌ ๊ฐ๋ฅ
- ํ์ ๊ณผ ๋์์ ๋ฒ์ ๊ด๋ฆฌ ๊ฐ๋ฅ.
โ ์ธ๋ถ ์ ์ฅ์์ ์ ์ฅํ์ฌ ์์ ํ๊ธฐ
- git remote add origin {gitlab_url(gitlab(github) ํ์ด์ง์ clone์์ ๋งํฌ ๊ฐ์ ธ์ค๊ธฐ)} : git remote๋ ๋ด ์ปดํจํฐ์์ ์ธ๋ถ ์ ์ฅ์ ์์ ์ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ก url์ด ๊ฐ๋ฆฌํค๋ ์ธ๋ถ ์๋ฒ ํ๋ก์ ํธ๋ฅผ ์๊ฒฉ ์ ์ฅ์๋ก ์ง์ ํ๊ณ ๊ทธ ์ด๋ฆ์ origin์ผ๋ก ํจ. ์ฆ, ์๊ฒฉ ์ ์ฅ์(gitlab_url)์ ์ถํ ์ด์ฉํ๊ธฐ ์ฝ๋๋ก origin์ผ๋ก ์ง์ .
- git push -u origin master: ํ์ฌ ํ๋ก์ ํธ ๋ด์ฉ์ origin์ด ๊ฐ๋ฆฌํค๋ ์๊ฒฉ ์ ์ฅ์์ ์ฌ๋ฆฌ๋ ๋ช
๋ น์ด.
.git ๋๋ ํ ๋ฆฌ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ repository ์์ญ์ ์ ๋ก๋ ํ ๊ฒ. ์ด์ ์ git push -u origin master ๋ช ๋ น์ด๋ฅผ ์์ฑํ ๊ธฐ๋ก์ด ์์ผ๋ฉด ์ด๋ฏธ origin์ด ๊ฐ๋ฆฌํค๋ ์๊ฒฉ ์ ์ฅ์๋ฅผ ์๊ธฐ ๋๋ฌธ์ git push ๋ง ์์ฑํด๋ ok.
- README.md ํ์ผ: ํด๋น ํ๋ก์ ํธ์ ๋ํ ์ค๋ช ์ ๋ด๊ณ ์๋ ํ์ผ.
- git clone {ํ๋ก์ ํธ_url}: url์ด ๊ฐ๋ฆฌํค๋ ์๊ฒฉ ์ ์ฅ์์ ํ๋ก์ ํธ๋ฅผ ๋๋ ํ ๋ฆฌ ํํ๋ก ๊ฐ์ ธ์ด.
์ ์ผ ์ฒ์ ์๋๊ฐ gitlab์ ์ฌ๋ฆฐ ํ๋ก์ ํธ์ commit์ ๋ด ์ปดํจํฐ์ ๊ฐ์ ธ์ค๋ ๋ช ๋ น์ด. clone์ ํ ๊ฒฝ์ฐ์๋ ์๊ฒฉ ์ ์ฅ์๋ฅผ ๊ฐ์ ธ ์จ ๊ฒ์ด๋ฏ๋ก remote ๋ช ๋ น์ด๋ก ์๊ฒฉ ์ ์ฅ์ ์ง์ ํ์ ์์.
- git pull: gitlab ์๋ฒ ์์ ์ต์ commit์ด ์๊ฒผ์ ๊ฒฝ์ฐ ๋ด ์ปดํจํฐ๋ก ๊ฐ์ ธ์ค๋ ๋ช
๋ น์ด.
gitlab history ์์ commit ๋ค์ด ์๋ก ๋ค๋ฅผ ๊ฒฝ์ฐ ์ถฉ๋์ด ์ผ์ด๋๋ฏ๋ก ๋ฐ๋์ ์ต์ commit์ด ๋ชจ๋ ๋ฐ์๋์๋์ง ํ์ธ ํ pull.
๐ git ์ฌํ
โ ์ค๋ฌด ํ๋ก์ ํธ ์งํ ๋ฐฉ์ โ๏ธ fork: ํ๋ก์ ํธ์ ์์ฑ๋๋ฅผ ์ํด ์๋ณธ ํ๋ก์ ํธ ์๋์ ๊ฐ์ธ ๊ฐ๋ฐ์์ ํ๋ก์ ํธ copied(๋ณต์ )๋ณธ ์์ฑ. > git clone ํ์ฌ ๋ด ์ปดํจํฐ์ ๊น๋ฉ ์๋ฒ๋ฅผ ๊ฐ์ ธ์ด. > ์์ (commit)ํ์ฌ git push ํ๋ฉด ์๋ณธ ํ๋ก์ ํธ๊ฐ ์๋ copied ํ๋ก์ ํธ์ ์ฌ๋ผ๊ฐ. > ์ดํ ๊น๋ฉ์์ ๋์ ๋ณต์ ๋ณธ ํ๋ก์ ํธ์์ ์๋ณธ ํ๋ก์ ํธ๋ก merge request๋ฅผ ๋ณด๋ (์๋ก์ด ์์ ํ์ธ ํ ๋ฐ์์ ์ํจ.) > merge request ์ ๋ํ ๊ธ์ ๋จ๊ธฐ๊ณ ์ถ๋ค๋ฉด discussion์ ํตํด ๊ธ ๋จ๊ธฐ๊ธฐ. โ๏ธ branch : ํน์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐโจ> ํ๋ ์ด์์ ๊ฐ๋ฐ ํ๋ฆ์ ์์ฑํ๊ธฐ ์ํด ๋ธ๋์น ์ฌ์ฉ.โจ> master: git ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ค์ ๋๋ ๋ธ๋์น, ์ค์ ์๋น์ค ๋ฐฐํฌ๋ฅผ ๋ชฉ์ ์ผ๋ก ์์ฑ๋ ์ปค๋ฐ๋ง ๋ .
HEAD -> master (ํค๋๋ ๋ธ๋์น๋ฅผ ํตํด ์ปค๋ฐ์ ๊ฐ๋ฆฌํด.) origin/master(gitlab ์๋ฒ์ master ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํด.)
- git branch {๋ธ๋์น๋ช }: ๋ธ๋์น ์์ฑ ๋ช ๋ น์ด.
- git checkout {๋ธ๋์น๋ช }: HEAD๊ฐ ๊ฐ๋ฆฌํค๊ณ ์ ํ๋ ๋ธ๋์น๋ฅผ ์ง์ ํ๋ ๋ช ๋ น์ด.
- git log --all --graph: HEAD๊ฐ ๊ฐ๋ฆฌํค๋ branch ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ branch์ ๋ํ commit ๊ธฐ๋ก์ ๊ทธ๋ํ ํ์์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด.
โ ํ์ ์ ์ค์ํ ๋ช ๋ น์ด: (merge)
-
Head ๊ฐ ๊ฐ๋ฆฌํฌ ๋ธ๋์น๋ก ์ด๋ (git checkout {๋ธ๋์น๋ช })
-
git merge {ํฉ์น ๋ธ๋์น๋ช }: ํ์ฌ head๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น์ ํฉ์น ๋ธ๋์น์ ๋ชจ๋ ์์ ์ ํฉํ๋ ๋ช ๋ น์ด.
- ํ๋ฆ์ ๋ถ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ: Fast-forward merge: ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค์ง ์๊ณ ๋ธ๋์น๊ฐ ๋น๊ฒจ์ ธ ์ฎ.
- ํ๋ฆ์ ๋ถ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ: ์๋ก์ด merge commit์ ๋ง๋ฆ.
-
Git push -u origin master: master branch๋ฅผ origin์ด ์๋ฏธํ๋ ๊น๋ฉ ์๋ฒ์ ํ๋ก์ ํธ์ ์ฌ๋ฆฌ๋ ๋ช ๋ น์ด.โจ> -u ์ต์ (= โset-upstream): ๋ด ์ปดํจํฐ์ master ๋ธ๋์น๊ฐ ๊น๋ฉ ์๋ฒ์ master ๋ธ๋์น๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ ๋ช ๋ น์ด.โจ > ์ดํ์๋ ์์ฑํ ํ์ X
-
Git push โforce: ์ ๋ก๋๋ฅผ ๊ฐ์ ํจ.