๐ 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