Git์ ๋ฌด์์ธ๊ฐ
- ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
(Distributed VCS). ์ค๋
์ท(์ปค๋ฐ) ๋จ์๋ก ์ฝ๋ ์ด๋ ฅ์ ๊ด๋ฆฌํ๊ณ , ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ํ๊ฒ ์คํยทํ์
ํ๋ค.
ํต์ฌ ๊ฐ๋
- ์ํน ๋๋ ํ ๋ฆฌ/์คํ
์ด์ง/๋ฆฌํฌ์งํ ๋ฆฌ: ์์ โ
git add(์คํ
์ด์ง) โ git commit(์ ์ฅ)
- ์ปค๋ฐ/๋ธ๋์น/ํ๊ทธ: ์ค๋
์ท๊ณผ ํฌ์ธํฐ.
HEAD๋ ํ์ฌ ์ฒดํฌ์์ํ ์ปค๋ฐ/๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํด
- ์๊ฒฉ(remote):
origin ๋ฑ ์๋ฒ ์ ์ฅ์. fetch/pull/push๋ก ๋๊ธฐํ
์์ฃผ ์ฐ๋ ๋ช
๋ น ๋ชจ์
# ์ด๊ธฐํ/๋ณต์
git init
git clone <repo-url>
# ์ํ/์ด๋ ฅ/์ฐจ์ด
git status
git log --oneline --graph --decorate --all
git diff # ์ํน vs ์คํ
์ด์ง
git diff --staged # ์คํ
์ด์ง vs ๋ง์ง๋ง ์ปค๋ฐ
# ์คํ
์ด์ง/์ปค๋ฐ
git add -p # ์ฒญํฌ ๋จ์ ์ ํ์ ์คํ
์ด์ง
git commit -m "feat: add user login"
# ๋ธ๋์น ์์ฑ/์ด๋/๋ณํฉ
git switch -c feat/login
git switch main
git merge feat/login # ๋ณํฉ ์ปค๋ฐ
git rebase main # ์ ํ ์ด๋ ฅ ๋ง๋ค๊ธฐ(๋ก์ปฌ์์ ์ ์คํ)
# ์๊ฒฉ ๋๊ธฐํ
git fetch # ์๊ฒฉ ์ฐธ์กฐ๋ง ๊ฐฑ์
git pull --rebase # ๊ฐ์ ธ์ค๋ฉฐ ๋ก์ปฌ ์์ ์ฌ๋ฐฐ์น
git push -u origin HEAD
# ์์ ์ ์ฅ
git stash push -m "wip: refactor"
git stash pop
# ๋๋๋ฆฌ๊ธฐ
git restore <file> # ์ํน ๋๋ ํ ๋ฆฌ ๋๋๋ฆฌ๊ธฐ
git reset --mixed HEAD~1 # ๋ง์ง๋ง ์ปค๋ฐ ์ทจ์+์คํ
์ด์ง ํด์ (๋ก์ปฌ ์ ๋ฆฌ)
git reset --hard HEAD~1 # ๊ฐ์ ๋๋๋ฆผ(์ฃผ์)
git revert <commit> # ๊ณต๊ฐ ์ด๋ ฅ์์ ์์ ํ ๋๋๋ฆฌ๊ธฐ
๋ธ๋์น ์ ๋ต(ํ์
)
- Trunk-based(์ถ์ฒ): ๋ณดํธ๋
main + ์์ ๊ธฐ๋ฅ ๋ธ๋์น(PR). ๋น ๋ฅธ ๋ณํฉยท์งง์ ํผ๋๋ฐฑ ๋ฃจํ
- Git Flow:
develop/release/hotfix๊ฐ ๋ถ๋ฆฌ๋ ํฐ ํ/๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ ๊ธด ํ๋ก์ ํธ์ ์ ํฉ
- ๊ณตํต ์์น: ์์ PR, ๋ช
ํํ ์ปค๋ฐ ๋ฉ์์ง(Conventional Commits), ํ์ ๋ฆฌ๋ทฐ/CI
์ถฉ๋ ๊ด๋ฆฌ ๋ฒ ์คํธ ํ๋ํฐ์ค
- ์์ฃผ fetch/rebaseํด ๋ณ๊ฒฝ์ ์๊ฒ ์ ์ง
- ํ์ผ ๋จ์๊ฐ ์๋ ์ฒญํฌ/ํจ์ ๋จ์๋ก ์์ ๋ฒ์๋ฅผ ์ต์ํ
- ๋๊ตฌ ํ์ฉ: IDE ๋จธ์ง ๋๊ตฌ,
git mergetool
- ํด๊ฒฐ ํ:
git add โ ํ
์คํธ ํต๊ณผ ํ์ธ โ git rebase --continue ๋๋ ์ปค๋ฐ
๋๋๋ฆฌ๊ธฐ ์ ํ ๊ฐ์ด๋
- ๋ก์ปฌ ์ ๋ฆฌ:
git reset(mixed/hard)
- ๊ณต๊ฐ ์ด๋ ฅ:
git revert๋ก ์ญ์ปค๋ฐ ์์ฑ(ํ์คํ ๋ฆฌ ๋ณด์กด)
- ์ค์ ๋ฐฉ์ง: ๊ฐ์ ํธ์๋ ์ต์ํ, ๋ณดํธ ๋ธ๋์น ์ ์ฑ
ํ์ฉ
ํ์ง๊ณผ ์๋ํ
.gitignore ์ ๋ฆฌ๋ก ๋ถํ์ ํ์ผ ์ ์ธ
- ์ปค๋ฐ ํ
(Husky)์ผ๋ก ๋ฆฐํธ/ํ
์คํธ ์๋ํ, CI์์ ๋น๋ยทํ
์คํธ ๊ฐ์
git bisect๋ก ํ๊ท ๋ฒ๊ทธ๋ฅผ ์ด๋ถ ํ์
๋ง๋ฌด๋ฆฌ
- ์์ ๋จ์์ ์ปค๋ฐ/PR, ์ผ๊ด๋ ์ ๋ต, ์์ ํ ๋๋๋ฆฌ๊ธฐ ์ต๊ด์ด ํ์
์์ฐ์ฑ์ ์ข์ฐํ๋ค. ํ ๊ท๋ชจ์ ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ์ ๋ง์ถฐ Trunk-based ๋๋ Git Flow๋ฅผ ์ ํํ๊ณ , ์๋ํ๋ก ํ์ง์ ๋ณด์ฅํ์.