๐ Git ๋ฐ GitHub CLI
๋ฒ์  ๊ด๋ฆฌ, ๋ธ๋์นญ, ์๊ฒฉ ์ ์ฅ์, stash, ํ๊ทธ ๋ฐ GitHub CLI๋ฅผ ์ํ ๊ธฐ๋ณธ ๋ฐ ๊ณ ๊ธ Git ๋ช ๋ น์ด.
๐น ๊ธฐ๋ณธ ๋ช ๋ น์ด
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| git add | ํ์ผ์ ์คํ ์ด์ง ์์ญ์ ์ถ๊ฐ | |
| git add file.txt | ๋ค์ ์ปค๋ฐ์ ์ํด ํน์  ํ์ผ ์คํ ์ด์ง | |
| git add . | ํ์ฌ ๋๋ ํฐ๋ฆฌ ๋ฐ ํ์์ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ ์คํ ์ด์ง | |
| git add -p | ํ์ผ์ ์ผ๋ถ๋ง ์ ํ์ ์ผ๋ก ์คํ ์ด์ง (๋ถ๋ถ ์ปค๋ฐ์ ์ ์ฉ) | |
| git clone | ์ ์ฅ์๋ฅผ ์ ๋๋ ํฐ๋ฆฌ๋ก ํด๋ก | |
| git clone -b branch_name URL | ๊ธฐ๋ณธ ๋ธ๋์น ๋์ ์ง์ ๋ ๋ธ๋์น๋ง ํด๋ก | |
| git clone --depth 1 URL | ์ต์ ์ปค๋ฐ๋ง ํด๋ก ํ์ฌ ์์ ๋ณต์ฌ (์๊ฐ๊ณผ ๊ณต๊ฐ ์ ์ฝ) | |
| git commit | ์ ์ฅ์์ ๋ณ๊ฒฝ ์ฌํญ ๊ธฐ๋ก | |
| git commit -m "Initial commit" | ์๋ํฐ๋ฅผ ์ด์ง ์๊ณ ๋ฉ์์ง์ ํจ๊ป ์ปค๋ฐ | |
| git commit -a -m "Fix bugs" | ์์ ๋ ์ถ์  ํ์ผ ๋ชจ๋ ์คํ ์ด์ง ํ ๋ฉ์์ง์ ํจ๊ป ์ปค๋ฐ | |
| git commit --amend | ๋ง์ง๋ง ์ปค๋ฐ ์ ๋ฐ์ดํธ (๋ฉ์์ง ๋ณ๊ฒฝ ๋๋ ์ถ๊ฐ ๋ณ๊ฒฝ ํฌํจ) | |
| git commit --fixup abc1234 | ์ธํฐ๋ํฐ๋ธ ๋ฆฌ๋ฒ ์ด์ค ์ค ์๋ squash๋ฅผ ์ํ fixup ์ปค๋ฐ ์์ฑ | |
| git config | ์ ์ฅ์ ๋๋ ๊ธ๋ก๋ฒ ์ต์  ๊ฐ์ ธ์ค๊ธฐ/์ค์  | |
| git config --global user.name "Name" | ๊ธ๋ก๋ฒ Git ์ฌ์ฉ์ ์ด๋ฆ ์ค์  | |
| git config --global user.email "email@example.com" | ๊ธ๋ก๋ฒ Git ์ด๋ฉ์ผ ์ค์  | |
| git config --list | ๋ชจ๋ Git ์ค์  ๋์ด (์ด๋ฆ, ์ด๋ฉ์ผ, ์๋ํฐ ๋ฑ) | |
| git diff | ์ปค๋ฐ ๊ฐ, ์ปค๋ฐ๊ณผ ์์ ํธ๋ฆฌ ๊ฐ์ ๋ณ๊ฒฝ์ฌํญ ํ์ | |
| git diff HEAD | ๋ง์ง๋ง ์ปค๋ฐ ์ดํ์ ๋ณ๊ฒฝ์ฌํญ ํ์ (์คํ ์ด์ง๋์ง ์์ ๋ณ๊ฒฝ) | |
| git diff --staged | ๋ค์ ์ปค๋ฐ์ ํฌํจ๋ ๋ณ๊ฒฝ์ฌํญ ํ์ | |
| git diff --word-diff HEAD~1 | ๋จ์ด ๋จ์ ์ฐจ์ด ํ์ | |
| git grep | ์ ์ฅ์ ํ์ผ ๋ด๋ถ ๊ฒ์ | |
| git grep "functionName" | ํ๋ก์ ํธ ํ์ผ์์  | |
| git grep -n "TODO" | 
 | |
| git grep -i "login" | 
 | |
| git init | ๋น Git ์ ์ฅ์ ์์ฑ ๋๋ ๊ธฐ์กด ์ ์ฅ์ ์ฌ์ด๊ธฐํ | |
| git init my-project | my-project ๋๋ ํฐ๋ฆฌ์ ์ ์ ์ฅ์ ์ด๊ธฐํ | |
| git init --bare | bare ์ ์ฅ์ ์ด๊ธฐํ | |
| git log | ์ปค๋ฐ ๋ก๊ทธ ํ์ | |
| git log --oneline | ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ํ ์ค ํ์์ผ๋ก ํ์ | |
| git log --graph --all | ๋ชจ๋ ๋ธ๋์น๋ฅผ ์ปค๋ฐ ๊ทธ๋ํ๋ก ์๊ฐํํ์ฌ ํ์ | |
| git log -p --stat | ์ปค๋ฐ์ ํจ์น ๋ฐ ํ์ผ ๋ณ๊ฒฝ ํต๊ณ ํ์ | |
| git reset | ์คํ ์ด์ง์์ ํ์ผ์ ์ ๊ฑฐํ๋ ์์ ๋๋ ํฐ๋ฆฌ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ง | |
| git reset HEAD file.txt | ์คํ ์ด์ง์์ ํ์ผ ์ ๊ฑฐ (ํธ์ง ๋ด์ฉ์ ์ ์ง) | |
| git reset --hard HEAD~1 | ํ ์ปค๋ฐ ์ด์ ์ผ๋ก ๋๋๋ฆฌ๊ณ ๋ชจ๋ ๋ณ๊ฒฝ ์ญ์  (๋ณต๊ตฌ ๋ถ๊ฐ!) | |
| git reset --soft HEAD~1 | ๋ง์ง๋ง ์ปค๋ฐ ์ทจ์ํ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ ์งํ์ฌ ๋ค์ ์ปค๋ฐ ๊ฐ๋ฅ | |
| git reset --mixed HEAD~1 | ์ปค๋ฐ ์ทจ์ ํ ๋ณ๊ฒฝ์ฌํญ์ ์คํ ์ด์งํ์ง ์๊ณ ์ ์ง | |
| git show | ๋ค์ํ ๊ฐ์ฒด ํ์ | |
| git show <commit_hash> | ํน์  ์ปค๋ฐ์ ๋ณ๊ฒฝ์ฌํญ๊ณผ ๋ฉ์์ง ํ์ | |
| git show HEAD~1 | ํ์ฌ ์ด์  ์ปค๋ฐ ํ์ | |
| git show --stat | ์ต์ ์ปค๋ฐ์ ํ์ผ ๋ณ๊ฒฝ ์์ฝ ํ์ | |
| git status | ์์ ํธ๋ฆฌ ์ํ ํ์ | |
| git status -s | ์งง์ ํ์์ผ๋ก ์ํ ํ์ | |
| git status -b | ํ์ฌ ๋ธ๋์น ๋ฐ ํ์ผ ์ํ ํ์ | 
๐ฟ ๋ธ๋์นญ ๋ฐ ๋ณํฉ
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| git branch | ๋ธ๋์น ์์ฑ, ๋์ด, ์ญ์  | |
| git branch new-feature | 
 | |
| git branch -d old-feature | 
 | |
| git checkout | ๋ธ๋์น ์ ํ ๋๋ ๋ค๋ฅธ ์ปค๋ฐ์์ ํ์ผ ๋ณต์ | |
| git checkout main | 
 | |
| git checkout -b new-branch | 
 | |
| git switch | ๋ธ๋์น ์ ํ ( checkout์ ๋จ์ํ๋ ๋์) | |
| git switch main | 
 | |
| git switch -c feature-x | 
 | |
| git switch new-feature | 
 | |
| git merge | ๋ค๋ฅธ ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ ํ์ฌ ๋ธ๋์น๋ก ๋ณํฉ | |
| git merge new-feature | 
 | |
| git merge --no-ff new-feature | ๋น ๋ฅธ ๋ณํฉ์ด ๊ฐ๋ฅํด๋ ํญ์ ๋ณํฉ ์ปค๋ฐ ์์ฑ | |
| git merge --abort | ์ถฉ๋ ๋ฐ์ ์ ๋ณํฉ ์ทจ์ ๋ฐ ๋ณ๊ฒฝ ๋๋๋ฆฌ๊ธฐ | |
| git rebase | ์ปค๋ฐ์ ์๋ก์ด ๊ธฐ๋ฐ ์ปค๋ฐ ์๋ก ์ฎ๊ธฐ๊ฑฐ๋ ๋ค์ ์ ์ฉ | |
| git rebase main | ๋ธ๋์น ์ปค๋ฐ์  | |
| git rebase -i HEAD~3 | ์ต๊ทผ 3๊ฐ์ ์ปค๋ฐ์ ์ธํฐ๋ํฐ๋ธํ๊ฒ ํธ์ง | |
| git rebase --abort | ์งํ ์ค์ธ ๋ฆฌ๋ฒ ์ด์ค ์ค์ง ๋ฐ ๋๋๋ฆฌ๊ธฐ | |
| git rebase -i --autosquash HEAD~5 | ์ธํฐ๋ํฐ๋ธ ๋ฆฌ๋ฒ ์ด์ค ์ค fixup/squash๋ก ํ์๋ ์ปค๋ฐ ์๋ ๋ณํฉ | |
| git cherry-pick | ๋ค๋ฅธ ๋ธ๋์น์์ ํน์  ์ปค๋ฐ ์ ์ฉ | |
| git cherry-pick <hash> | ํน์  ์ปค๋ฐ(ํด์)์ ํ์ฌ ๋ธ๋์น์ ์ ์ฉ | |
| git cherry-pick --continue | ์ถฉ๋ ํด๊ฒฐ ํ cherry-pick ๊ณ์ ์งํ | |
| git cherry-pick A^..B | 
 | 
๐ก ์๊ฒฉ ์ ์ฅ์
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| git remote | ์๊ฒฉ ์ ์ฅ์(GitHub ๋ฑ)์ ๋ํ ๋งํฌ ๊ด๋ฆฌ | |
| git remote -v | ์๊ฒฉ ์ด๋ฆ๊ณผ URL ํ์ | |
| git remote add origin URL | 
 | |
| git pull | ์๊ฒฉ ๋ธ๋์น์์ ๋ณ๊ฒฝ ๋ค์ด๋ก๋ ๋ฐ ์๋ ๋ณํฉ | |
| git pull origin main | ์๊ฒฉ  | |
| git pull --rebase origin main | ๋ณํฉ ๋์ ๋ฆฌ๋ฒ ์ด์ค๋ก ์๊ฒฉ ๋ธ๋์น ์์ ์ ์ฉ | |
| git push | ๋ก์ปฌ ๋ณ๊ฒฝ์ ์๊ฒฉ ์ ์ฅ์์ ์ ๋ก๋ | |
| git push origin main | ๋ก์ปฌ  | |
| git fetch | ๋ณํฉํ์ง ์๊ณ ์๊ฒฉ์์ ๋ณ๊ฒฝ ๋ค์ด๋ก๋ | |
| git fetch origin | ์๊ฒฉ  | |
| git fetch origin main | ์๊ฒฉ์์  | |
| git fetch --all | ๋ชจ๋ ์๊ฒฉ ์ ์ฅ์์์ ์ ๋ฐ์ดํธ ๊ฐ์ ธ์ค๊ธฐ | |
| git fetch --prune | ์ญ์ ๋ ๋ธ๋์น ์ ๋ฆฌ โ ์๊ฒฉ์์ ์ญ์ ๋ ๋ธ๋์น ๋ก์ปฌ ์ฐธ์กฐ ์ ๊ฑฐ | |
| git fetch --dry-run | ์ค์ ๋ก ๋ค์ด๋ก๋ํ์ง ์๊ณ ๊ฐ์ ธ์ฌ ํญ๋ชฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | |
| git fetch origin +main | ์ถฉ๋์ ๋ฎ์ด์ฐ๋ฉฐ ๋ก์ปฌ ์ถ์  ๋ธ๋์น( | 
๐ฆ Stash ๋ฐ ์ ๋ฆฌ
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| git stash | ์ปค๋ฐ๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ์ ์์ ์ ์ฅ (์์ ์ค) | |
| git stash | ์์  ๋ฐ ์คํ ์ด์ง๋ ํ์ผ ์ ์ฅ ํ ์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง์ง๋ง ์ปค๋ฐ์ผ๋ก ๋๋๋ฆผ | |
| git stash apply | ์ต๊ทผ stash ์ฌ์ ์ฉ (stash๋ ์ ์ง๋จ) | |
| git stash pop | ์ต๊ทผ stash ์ฌ์ ์ฉ ๋ฐ ์ ๊ฑฐ | |
| git stash list | ๋ชจ๋ stash ๋ชฉ๋ก ํ์ | |
| git stash branch feature-fix | ์ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ต๊ทผ stash ์ ์ฉ | |
| git clean | Git์ ์ถ์ ๋์ง ์์ ํ์ผ ์๊ตฌ ์ญ์  | |
| git clean -f | ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์ถ์ ๋์ง ์์ ํ์ผ ์ญ์  | |
| git clean -fd | ์ถ์ ๋์ง ์์ ํ์ผ๊ณผ ํด๋ ์ญ์  | |
| git clean -n | ์ญ์ ๋ ํญ๋ชฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (์์  dry run) | 
๐ท๏ธ ํ๊ทธ
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| git tag | ํน์  ์์ ์ ํ์ํ๊ธฐ ์ํด ํ๊ทธ ์์ฑ, ๋์ด, ์ญ์  (์: ๋ฆด๋ฆฌ์ค) | |
| git tag -a v1.0 -m "Version 1.0" | 
 | |
| git tag -d v1.0 | 
 | |
| git push | ๋ก์ปฌ์์ ์๊ฒฉ ์ ์ฅ์๋ก ์ปค๋ฐ, ๋ธ๋์น ๋ฐ ํ๊ทธ ์ ๋ก๋ | |
| git push origin --tags | ๋ชจ๋ ๋ก์ปฌ ํ๊ทธ๋ฅผ ์๊ฒฉ์ ํธ์ (์ฌ๋ฌ ๋ฒ์  ํ๊ทธ ํ ์ ์ฉ) | |
| git push origin v1.0 | ํน์  ํ๊ทธ (์:  | |
| git push origin :refs/tags/v1.0 | ์๊ฒฉ ํ๊ทธ  | 
๐ ๏ธ ์ถฉ๋ ํด๊ฒฐ
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| git mergetool | ๋จธ์ง ์ถฉ๋ ํด๊ฒฐ์ ๋๋ ์๊ฐ์  ๋๊ตฌ ์ด๊ธฐ | |
| git mergetool --tool=meld | ํน์  ๋จธ์ง ๋๊ตฌ (์: Meld) ์ฌ์ฉํด ์ถฉ๋ ํด๊ฒฐ | |
| git rerere | Git์ด ์ด์ ์ ํด๊ฒฐํ ๋จธ์ง ์ถฉ๋์ ๊ธฐ์ตํ๋๋ก ํจ | |
| git config --global rerere.enabled true | ๊ณผ๊ฑฐ ์ถฉ๋ ํด๊ฒฐ ์๋ ์ฌ์ฌ์ฉ ํ์ฑํ | |
| git rerere status | ์ ์ฅ๋ ์ถฉ๋ ํด๊ฒฐ์ด ์๋ ํ์ผ ํ์ | |
| git rerere diff | Git์ด ์ ์ฅํ ๋ฏธ๋ ์ฌ์ฌ์ฉ์ฉ ๋ณ๊ฒฝ์ฌํญ ํ์ | 
โ๏ธ ๊ณ ๊ธ ๋ช ๋ น์ด
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| git bisect | ๋ฒ๊ทธ๊ฐ ๋์ ๋ ์ปค๋ฐ ์ฐพ๊ธฐ ์ํด ์ด์ง ๊ฒ์ ์ฌ์ฉ | |
| git bisect start | ๋ฒ๊ทธ๊ฐ ์๋ ์ปค๋ฐ๊ณผ ์๋ ์ปค๋ฐ ์ฌ์ด์์ ์ด์ง ๊ฒ์ ์์ | |
| git bisect bad | ํ์ฌ ์ปค๋ฐ์ โbadโ๋ก ํ์ (๋ฒ๊ทธ ํฌํจ) | |
| git bisect good <commit> | ๋ฒ๊ทธ๊ฐ ์๋ ์ปค๋ฐ์ โgoodโ์ผ๋ก ํ์ | |
| git blame | ํ์ผ ๊ฐ ์ค์ ๋ง์ง๋ง์ผ๋ก ์์ ํ ์ฌ๋ ํ์ (๋ฆฌ๋น์  ๋ฐ ์์ฑ์ ํฌํจ) | |
| git blame file.txt | ํ์ผ์ ๊ฐ ์ค์ ๋ํ ์์ฑ์์ ์ปค๋ฐ ์ ๋ณด ํ์ | |
| git blame -L 10,20 file.txt | 10~20๋ฒ์งธ ์ค์ ๋ํ blame ์ ๋ณด๋ง ํ์ | |
| git blame --show-email file.txt | ๋ผ์ธ ๋ณ๊ฒฝ๊ณผ ํจ๊ป ์์ฑ์์ ์ด๋ฉ์ผ ํ์ | |
| git reflog | ๋ธ๋์น ์ด๋ ๋ฐ HEAD์ ์ฐธ์กฐ ๋ก๊ทธ(reflog) ๋ณด๊ธฐ ๋ฐ ๊ด๋ฆฌ | |
| git reflog show main@{1.week.ago} | 
 | |
| git reflog expire --expire=30.days --dry-run | 30์ผ ์ด์ ๋ reflog ํญ๋ชฉ ์ค ์ ๋ฆฌ ๊ฐ๋ฅํ ๊ฒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (๋ณ๊ฒฝ ์์) | |
| git reflog delete HEAD@{2} | ํน์  reflog ํญ๋ชฉ ์ญ์  (์ฃผ์: ๋ณต๊ตฌ์ ์ํฅ ์ค ์ ์์) | |
| git submodule | ์๋ธ๋ชจ๋ ์ถ๊ฐ, ์ด๊ธฐํ, ์ ๋ฐ์ดํธ, ๊ฒ์ฌ (์ ์ฅ์ ์์ ์ ์ฅ์) | |
| git submodule add URL path | ์ธ๋ถ ์ ์ฅ์๋ฅผ ์๋ธ๋ชจ๋๋ก ํน์  ๊ฒฝ๋ก์ ์ถ๊ฐ | |
| git submodule update --init | ์ ์ฅ์์ ๋์ด๋ ๋ชจ๋ ์๋ธ๋ชจ๋ ์ด๊ธฐํ ๋ฐ ๋ค์ด๋ก๋ | |
| git submodule foreach git pull | ๊ฐ ์๋ธ๋ชจ๋ ์์์  | |
| git submodule sync --recursive | .gitmodules ํ์ผ ๋ณ๊ฒฝ ํ ์๋ธ๋ชจ๋ URL ๋๊ธฐํ | |
| git submodule update --remote --merge | ์๋ธ๋ชจ๋์ ์๊ฒฉ ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ผ๋ก ์ ๋ฐ์ดํธ | |
| git archive | ํน์  ์ปค๋ฐ ๋๋ ๋ธ๋์น์์ ํ์ผ์ ์์นด์ด๋ธ(zip, tar ๋ฑ) ์์ฑ | |
| git archive --format=zip HEAD > archive.zip | HEAD์ ํ์ฌ ํ๋ก์ ํธ ํ์ผ์ ZIP ์์นด์ด๋ธ๋ก ์์ฑ | |
| git archive -o release.tar.gz HEAD | ํ์ฌ HEAD์์  | |
| git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz | ํ์ฌ ํ๋ก์ ํธ๋ฅผ  | |
| git gc | ๋ถํ์ํ ํ์ผ ์ ๋ฆฌ ๋ฐ ์ ์ฅ์ ์ฑ๋ฅ ์ต์ ํ | |
| git gc --aggressive | ์ฒ ์ ํ ์ ๋ฆฌ ๋ฐ ์ต์ ํ ์ํ (๋๋ฆฌ์ง๋ง ํจ๊ณผ์ ) | |
| git gc --prune=now | ์ฆ์ ๋ชจ๋ ์ ๊ทผ ๋ถ๊ฐ ๊ฐ์ฒด ์ ๊ฑฐ (์ฃผ์ ํ์) | |
| git shortlog | ์์ฑ์์ ์ปค๋ฐ ์์ฝ ๋น ๋ฅด๊ฒ ๋ณด๊ธฐ | |
| git shortlog -e | ์์ฑ์ ๋ชฉ๋ก๊ณผ ์ด๋ฉ์ผ ํ์ (๋๊ฐ ์ผ๋ง๋ ๊ธฐ์ฌํ๋์ง ๋ถ์์ฉ) | |
| git shortlog -s -n | ์์ฑ์๋ณ ์ปค๋ฐ ์ ํ์, ์ปค๋ฐ ์ ๊ธฐ์ค ์ ๋ ฌ | |
| git shortlog -sne | ์์ธ ํ๋ ์ถ์ ์ฉ ์ด๋ฆ๊ณผ ์ด๋ฉ์ผ ํฌํจํ์ฌ ํ์ | |
| git revert | ๊ธฐ๋ก์ ๋ค์ ์ฐ์ง ์๊ณ ์ด์  ์ปค๋ฐ์ ๋๋๋ฆฌ๋ ์๋ก์ด ์ปค๋ฐ ์์ฑ | |
| git revert HEAD | ๋ง์ง๋ง ์ปค๋ฐ์ ๋๋๋ฆฌ๋ ์ ์ปค๋ฐ ์์ฑ | |
| git revert <commit_hash> | ํน์  ์ปค๋ฐ ํด์๋ฅผ ๋๋๋ฆฌ๋ ์ ์ปค๋ฐ ์์ฑ (์์ ํ ๋ฐฉ๋ฒ) | 
๐ GitHub CLI
gh๋ฅผ ์ฌ์ฉํ๋ฉด ํฐ๋ฏธ๋์์ GitHub๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| gh auth login | GitHub ํธ์คํธ์ ์ธ์ฆํ์ฌ CLI ๋ช ๋ น์ด๊ฐ ๊ณ์ ๊ณผ ์ํธ์์ฉํ ์ ์๋๋ก ํจ | |
| gh auth login --with-token < mytoken.txt | ํ์ผ( | |
| gh auth login --hostname enterprise.internal | GitHub Enterprise ์๋ฒ์ ์ธ์ฆ (github.com ์๋) | |
| gh repo clone | GitHub ์ ์ฅ์๋ฅผ ๋ก์ปฌ ๋จธ์ ์ผ๋ก ํด๋ก | |
| gh repo clone user/repo | 
 | |
| gh repo clone cli/cli -- --depth=1 | ์ต์ ์ปค๋ฐ๋ง ๋ค์ด๋ก๋ํ์ฌ ๋น ๋ฅด๊ณ ์์ ํด๋ก ์ํ | |
| gh repo clone cli/cli workspace/cli | 
 | |
| gh issue list | GitHub ์ ์ฅ์์ ์ด์ ๋์ด (ํํฐ๋ง ์ต์  ํฌํจ) | |
| gh issue list --assignee "@me" | ์์ ์๊ฒ ํ ๋น๋ ์ด์ ๋์ด | |
| gh issue list --state all | ์ํ์ ๊ด๊ณ์์ด ๋ชจ๋ ์ด์ ๋์ด (open, closed) | |
| gh issue list --search "error no:assignee sort:created-asc" | โerrorโ์ ์ผ์นํ๊ณ , ๋ฏธํ ๋น์ด๋ฉฐ, ์์ฑ ๋ ์ง ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์ด์ ๋์ด | |
| gh pr create | CLI๋ฅผ ํตํด GitHub์ Pull Request ์์ฑ | |
| gh pr create --title "..." | ์ง์ ๋ ์ ๋ชฉ์ผ๋ก Pull Request ์์ฑ | |
| gh pr create --project "Roadmap" | โRoadmapโ์ด๋ผ๋ GitHub ํ๋ก์ ํธ์ Pull Request ์ฐ๊ฒฐ | |
| gh pr create --base develop --head monalisa:feature | fork  | |
| gh repo create | CLI์์ ์ GitHub ์ ์ฅ์ ์์ฑ | |
| gh repo create my-project | GitHub์  | |
| gh repo create my-project --public --clone | ๊ณต๊ฐ ์ ์ฅ์ ์์ฑ ํ ๋ก์ปฌ์ ํด๋ก | |
| gh repo create my-project --private --source=. --remote=upstream | ํ์ฌ ํด๋์์ ๋น๊ณต๊ฐ ์๊ฒฉ ์ ์ฅ์ ์์ฑ ํ  | 
๐ก Git ๋ณ์นญ (์ ์ฉํ ๋จ์ถํค)
์์ฃผ ์ฌ์ฉํ๋ Git ๋ช ๋ น์ด๋ฅผ ๋น ๋ฅด๊ฒ ์คํํ ์ ์๋๋ก ํธ๋ฆฌํ ๋ณ์นญ์ ์ค์ ํ์ธ์:
git config --global alias.br branch                                       # ๋จ์ถํค: git branch
git config --global alias.ci commit                                       # ๋จ์ถํค: git commit
git config --global alias.co checkout                                     # ๋จ์ถํค: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate"  # ๋ณด๊ธฐ ์ข์ ํ์คํ ๋ฆฌ ๊ทธ๋ํ
git config --global alias.last "log -1 HEAD"                              # ๋ง์ง๋ง ์ปค๋ฐ ํ์
git config --global alias.st status                                       # ๋จ์ถํค: git status๐ ์ ๋ฌธ๊ฐ์ฉ ๊ณ ๊ธ Git ๋ช ๋ น์ด
| ๋ช ๋ น์ด | ์์ | ์ค๋ช | 
|---|---|---|
| git filter-repo | Git ๊ธฐ๋ก์ ๋ค์ ์์ฑํ์ฌ ํ์ผ, ์์ฑ์, ๊ฒฝ๋ก๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์์ ํ  ์ ์๋ ๊ฐ๋ ฅํ๊ณ  ๋น ๋ฅธ ๋๊ตฌ. git filter-branch๋ฅผ ๋์ฒดํ๋ฉฐ ์๋์ ์์ ์ฑ์ด ํฅ์๋จ | |
| git filter-repo --path secret.txt --invert-paths | 
 | |
| git filter-repo --replace-text replacements.txt | ์ ์ฒด ๊ธฐ๋ก์์ ๋ฌธ์์ด ๋๋ ํจํด์ ์ผ๊ด ๊ต์ฒด (์: ์๊ฒฉ ์ฆ๋ช ์ ๊ฑฐ) | |
| git filter-repo --subdirectory-filter src | ํ์ ๋๋ ํฐ๋ฆฌ ๊ธฐ๋ก์ ์๋ก์ด ์ ์ฅ์๋ก ์ถ์ถํ๋ฉด์ ์ปค๋ฐ ๋ฉํ๋ฐ์ดํฐ ๋ณด์กด | |
| git worktree | ๋จ์ผ ์ ์ฅ์์ ์ฐ๊ฒฐ๋ ์ฌ๋ฌ ์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ฌ ๋ค๋ฅธ ๋ธ๋์น์์ ๋์์ ์์ ๊ฐ๋ฅ (์ถ๊ฐ ํด๋ก ๋ถํ์) | |
| git worktree add ../feature feature-branch | ๊ฐ์ ์ ์ฅ์์ ์ถ๊ฐ ์์ ํธ๋ฆฌ ์์ฑ โ ๋ณ๋ ฌ ๋ธ๋์น ์ฒดํฌ์์ ๊ฐ๋ฅ | |
| git worktree list | ํ์ฑ worktree ๋ชฉ๋ก, ๊ฒฝ๋ก, ์ฐ๊ฒฐ๋ ๋ธ๋์น ํ์ | |
| git worktree remove ../feature | ๋ ์ด์ ํ์ํ์ง ์์ worktree ์ ๊ฑฐ (์์ ๋๋ ํฐ๋ฆฌ ์์  ์ ๋ฆฌ) | |
| git replace | ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋์ฒดํ๋ ์์ ์ฐธ์กฐ ์์ฑ โ ๋ก์ปฌ ๊ธฐ๋ก์ ํ๊ดดํ์ง ์๊ณ ์กฐ์ ๋ฐ ํ ์คํธ ๊ฐ๋ฅ | |
| git replace <old_commit> <new_commit> | ๋ก์ปฌ ์ ์ฅ์์์ ํ ์ปค๋ฐ์ ๋ค๋ฅธ ์ปค๋ฐ์ผ๋ก ์์ ๊ต์ฒด (ํ ์คํธ/ํจ์น์ ์ ์ฉ) | |
| git replace --list | ํ์ฑ ๋์ฒด ์ฐธ์กฐ ํ์ | |
| git replace -d <replace_ref> | ํน์  ๋์ฒด ์ฐธ์กฐ ์ญ์ ํ์ฌ ์๋ ๋์ ๋ณต์ | |
| git stash | ์ปค๋ฐ๋์ง ์์ ๋ณ๊ฒฝ์ ์คํ์ ์์ ์ ์ฅํ์ฌ ๋ฏธ์์ฑ ์์ ์ ์ปค๋ฐํ์ง ์๊ณ ๋ ์ปจํ ์คํธ ์ ํ ๊ฐ๋ฅ | |
| git stash push -p | ๋ณ๊ฒฝ์ฌํญ ์ผ๋ถ๋ง ์ ํ์ ์ผ๋ก stash โ ์ธ๋ฐํ ์ ์ด ๊ฐ๋ฅ | |
| git stash push -m "WIP selective stash" | ์๋ณ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ง์  ๋ฉ์์ง์ ํจ๊ป stash ์์ฑ | |
| git stash apply stash@{2} | stash ๋ชฉ๋ก์์ ํน์  stash ์ ์ฉ (์ญ์ ํ์ง ์์) | |
| git rebase | ์ปค๋ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฐ ์๋ก ๋ค์ ์ ์ฉ โ ๋ ๊น๋ํ๊ณ ์ ํ์ ์ธ ๊ธฐ๋ก ์ ์ง ๋ฐ ์ธํฐ๋ํฐ๋ธ ํธ์ง ๊ฐ๋ฅ | |
| git rebase --interactive --autosquash | fixup/squash ํ์๋ ์ปค๋ฐ์ ์๋์ผ๋ก ์ฌ์ ๋ ฌยท๋ณํฉํ๋ ์ธํฐ๋ํฐ๋ธ rebase ์์ | |
| git rebase -i --autosquash HEAD~10 | push ์ ์ ์ปค๋ฐ ์ด๋ ฅ์ ์ ๋ฆฌํ๊ธฐ ์ํด fixup/squash ์๋ ๋ณํฉ | |
| git commit --fixup <commit> | ์ธํฐ๋ํฐ๋ธ rebase์์ ์๋ squash๋ fixup ์ปค๋ฐ ์์ฑ | |
| git commit --squash <commit> | ๋ฆฌ๋ฒ ์ด์ค ์ ํน์  ์ปค๋ฐ๊ณผ ๋ณํฉ๋ squash ์ปค๋ฐ ์์ฑ | |
| git bisect | ์ด์ง ๊ฒ์์ ํตํด ๋ฒ๊ทธ๋ฅผ ๋์ ํ ์ปค๋ฐ์ ํจ์จ์ ์ผ๋ก ์๋ณ. ์ปค๋ฐ๋ค์ ์์ฐจ์ ์ผ๋ก ํ ์คํธํ์ฌ ๋ฌธ์  narrowing | |
| git bisect run | ๊ฐ ์ปค๋ฐ์์ ์ง์ ๋ ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด bisect ์๋ํ โ ์๋ ๊ฐ์ ์์ด ๋น ๋ฅด๊ฒ ๋ฌธ์  ์ปค๋ฐ ์ฐพ๊ธฐ | |
| git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh | ์๋ํ๋ ํ ์คํธ ์คํฌ๋ฆฝํธ๋ก bisect๋ฅผ ์คํํ์ฌ ๋ฒ๊ทธ ์๋ณ ์๋ ํฅ์ | |
| git bisect visualize | ๊ทธ๋ํฝ ๋๊ตฌ๋ก bisect ๊ณผ์  ์๊ฐํ | |
| git bisect reset | bisect ๋ชจ๋ ์ข ๋ฃ ํ ์๋ HEAD๋ก ๋ณต์ | |
| git commit | amend, sign, fixup, ๋ฉ์์ง ์ปค์คํฐ๋ง์ด์ฆ ์ต์ ์ ์ฌ์ฉํด ๊ณ ํ์ง ํ๋ก์ ํธ ๊ธฐ๋ก ์ ์ง | |
| git commit --gpg-sign | GPG ํค๋ก ์๋ช ๋ ์ปค๋ฐ ์์ฑ โ ์ปค๋ฐ์ ์ง์์ฑ๊ณผ ์์ฑ์ ๊ฒ์ฆ ๊ฐ๋ฅ | |
| git commit -S -m "Signed commit" | GPG ํค๋ก ์ปค๋ฐ ์ํธํ ์๋ช โ ๋ฌด๊ฒฐ์ฑ๊ณผ ์์ฑ์ ์ ๋ขฐ์ฑ ๋ณด์ฅ | |
| git config --global user.signingkey <key_id> | ์ปค๋ฐ ์๋ช ์ ์ฌ์ฉํ GPG ํค๋ฅผ ์ ์ญ์ผ๋ก ์ค์  | |
| git log --show-signature | ์ปค๋ฐ์ GPG ์๋ช ์ ๋ณด ํ์ธ ๋ฐ ํ์ | |
| git reflog | HEAD์ ๋ธ๋์น ์ ๋ฐ์ดํธ ๊ธฐ๋ก(reflog) ์ ์ง โ ์์ด๋ฒ๋ฆฐ ์ปค๋ฐ ๋ณต๊ตฌ ๋ฐ ๋ก์ปฌ ๊ธฐ๋ก ์ถ์ ์ ํ์ | |
| git reset --hard HEAD@{3} | reflog์์ ์ด์  ์ํ๋ก ๋ธ๋์น ๋ฆฌ์ ํ์ฌ ๋ณ๊ฒฝ ๋ณต๊ตฌ ๋๋ ๋๋๋ฆฌ๊ธฐ | |
| git reflog expire --expire=now --all | ๋ชจ๋ reflog ํญ๋ชฉ์ ์ฆ์ ๋ง๋ฃ์์ผ ๊ธฐ๋ก ์ ๋ฆฌ (์ฃผ์ ํ์) | 
๐งฐ ์ ๋ฌธ๊ฐ ์ํฌํ๋ก์ฐ ํ ๋ฐ ์๋ํ
| ์ฃผ์  | ๋ช ๋ น์ด / ์์ | ์ค๋ช ๋ฐ ์ ๋ฌธ๊ฐ ํ | 
|---|---|---|
| ๊ฐ๋ ฅํ ์ ์ฅ์ ์ ๋ฆฌ | git gc --aggressive --prune=now | ๊น์ garbage collection ์ํ ๋ฐ ์ ๊ทผ ๋ถ๊ฐ ๊ฐ์ฒด ์ฆ์ ์ ๊ฑฐ โ ์ ์ฅ์ ์ต์ ํ. ์ ์ง๋ณด์ ์ ์ฌ์ฉ | 
| ๋ณ๋ ฌ ๋ธ๋์น Worktree | git worktree add ../feature-branch feature | ์ฌ๋ฌ ์์ ํธ๋ฆฌ๋ฅผ ์ ์งํ์ฌ ๋์์ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๊ฐ๋ฅ, ํด๋ก ์ค๋ฒํค๋ ๋ฐฉ์ง | 
| ๊น๋ํ๊ณ ์ ํ์ ์ธ ๊ธฐ๋ก | git rebase -i --autosquash | push ์ ์ autosquash ์ต์ ์ผ๋ก ์ธํฐ๋ํฐ๋ธ rebase ์คํ โ ๊ธฐ๋ก์ ๊น๋ํ๊ณ ์ฝ๊ธฐ ์ฝ๊ฒ ์ ์ง | 
| ๋ณด์ ์ปค๋ฐ | git commit -S | GPG๋ก ์ปค๋ฐ ์๋ช โ ๊ณต์ ์ ์ฅ์์์ ์ ๋ขฐ์ฑ ํฅ์ (์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ํ์) | 
| ์๋ํ๋ Bisect | git bisect run ./test-script.sh | bisect ๊ณผ์ ์์ ๊ฐ ์ปค๋ฐ๋ง๋ค ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด ๋ฒ๊ทธ ํํ ์๋ํ | 
| ์ถฉ๋ ํด๊ฒฐ ์บ์ | git config --global rerere.enabled true | ์ถฉ๋ ํด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ๋ฐ๋ณต๋๋ merge/rebase ์ถฉ๋ ์ฒ๋ฆฌ ์๋ ํฅ์ | 
| ๊ณต์ ๋ณ์นญ ๋ฐ Hooks | ๊ณต์ ์ ์ฅ์ ๋๋ CI ํ์ดํ๋ผ์ธ์ ๊ณตํต Git ๋ณ์นญ ๋ฐ ์ปค๋ฐ hook ์ ์ฅ โ ํ ํ์คํ ๋ฐ ์์ฐ์ฑ ํฅ์ | 
์ถ๊ฐ ์๋ฃ
๐ง ํ
๋ชจ๋  ๊ฒ์ ์ธ์ฐ๋ ค ํ์ง ๋ง์ธ์. --help๋ฅผ ์ฌ์ฉํ๊ณ , ํ์ํ๋ฉฐ, ์ ๊ธฐ์ ์ผ๋ก ์ฐ์ตํ์ธ์:
git help <command>
git status๐ ์ ์ฉํ ๋งํฌ
๐ Git ๊ณต์ ๋ฌธ์ โ ๋ชจ๋  Git ๋ช
๋ น์ด์ ๋ํ ์์ธ ๋งค๋ด์ผ:
https://git-scm.com/docs
๐ Learn Git Branching โ ๋ธ๋์น ๊ฐ๋
์ ์ตํ๊ธฐ ์ํ ๋ํํ ์๊ฐ ํํ ๋ฆฌ์ผ:
https://learngitbranching.js.org
๐ Pro Git ์ฑ
 (๋ฌด๋ฃ, Scott Chacon & Ben Straub ์ ):
https://git-scm.com/book
๐ Git ์นํธ ์ํธ (๊ณต์ ๊ฐ๊ฒฐ ์ฐธ๊ณ ์๋ฃ):
https://education.github.com/git-cheat-sheet-education.pdf