All Projects โ†’ mingrammer โ†’ Git Tips

mingrammer / Git Tips

๐Ÿ“š Git ํŒ ๋ชจ์Œ์ง‘ (https://github.com/git-tips/tips ํ•œ๊ตญ์–ด ๋ฒ„์ „)

Labels

Git Tips

git tips์˜ ํ•œ๊ตญ์–ด ๋ฒ„์ „ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

English | ไธญๆ–‡ | ะ ัƒััะบะธะน | Tiแบฟng Viแป‡t

ํŒ ํˆด

๋ชฉ์ฐจ

์ฐธ๊ณ ๋กœ ๋ชจ๋“  ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ ๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: git version 2.7.4 (Apple Git-66).

20๊ฐœ ๋‚ด์™ธ์˜ ๋ช…๋ น์–ด๋กœ Git ์‚ฌ์šฉํ•˜๊ธฐ

git help everyday

Git๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์œ ์šฉํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ ๋ณด๊ธฐ

git help -g

๋‚ด์šฉ์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ฒ€์ƒ‰

git log -S'<a term in the source>'

์›๊ฒฉ์ง€ ๋™๊ธฐํ™” ๋ฐ ๋กœ์ปฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฎ์–ด์“ฐ๊ธฐ

git fetch origin && git reset --hard origin/master && git clean -f -d

ํŠน์ • ์ปค๋ฐ‹๊นŒ์ง€์˜ ๋ชจ๋“  ํŒŒ์ผ ๋‚˜์—ดํ•˜๊ธฐ

git ls-tree --name-only -r <commit-ish>

์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹ ์ดˆ๊ธฐํ™”

git update-ref -d HEAD

์ถฉ๋Œ๋œ ๋ชจ๋“  ํŒŒ์ผ ๋‚˜์—ดํ•˜๊ธฐ

git diff --name-only --diff-filter=U

ํŠน์ • ์ปค๋ฐ‹์—์„œ ๋ณ€๊ฒฝ๋œ ๋ชจ๋“  ํŒŒ์ผ ๋‚˜์—ดํ•˜๊ธฐ

git diff-tree --no-commit-id --name-only -r <commit-ish>

๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ์ดํ›„๋กœ ์Šคํ…Œ์ด์ง•๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ณด๊ธฐ

git diff

์ปค๋ฐ‹์„ ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ…Œ์ด์ง•๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ณด๊ธฐ

git diff --cached

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git diff --staged

์Šคํ…Œ์ด์ง•๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ๊ณผ ์Šคํ…Œ์ด์ง•๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ชจ๋‘ ๋ณด๊ธฐ

git diff HEAD

์ด๋ฏธ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ๋จธ์ง€๋œ ๋ชจ๋“  ๋ธŒ๋žœ์น˜ ๋‚˜์—ดํ•˜๊ธฐ

git branch --merged master

์ด์ „ ๋ธŒ๋žœ์น˜๋กœ ์ „ํ™˜ํ•˜๊ธฐ

git checkout -

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git checkout @{-1}

์ด๋ฏธ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ๋จธ์ง€๋œ ๋ชจ๋“  ๋ธŒ๋žœ์น˜๋“ค ์‚ญ์ œํ•˜๊ธฐ

git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d # will not delete master if master is not checked out

๋ชจ๋“  ๋ธŒ๋žœ์น˜๋“ค ๋ฐ ๊ทธ ๋ธŒ๋žœ์น˜๋“ค์˜ ์—…์ŠคํŠธ๋ฆผ๊ณผ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ๋‚˜์—ดํ•˜๊ธฐ

git branch -vv

์—…์ŠคํŠธ๋ฆผ ๋ธŒ๋žœ์น˜ ์„ค์ • (ํŠธ๋ž˜ํ‚น)

git branch -u origin/mybranch

๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

git branch -d <local_branchname>

์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

git push origin --delete <remote_branchname>

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git push origin :<remote_branchname>

๋กœ์ปฌ ํƒœ๊ทธ ์‚ญ์ œ

git tag -d <tag-name>

์›๊ฒฉ ํƒœ๊ทธ ์‚ญ์ œ

git push origin :refs/tags/<tag-name>

๋กœ์ปฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ—ค๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋‚ด์šฉ์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ

git checkout -- <file_name>

Revert: ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ปค๋ฐ‹ ๋˜๋Œ๋ฆฌ๊ธฐ

git revert <commit-ish>

Reset: ์ปค๋ฐ‹ ์ œ๊ฑฐ (ํ”„๋ผ์ด๋น— ๋ธŒ๋žœ์น˜์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒ๊ณ )

git reset <commit-ish>

์ด์ „ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๋ณ€๊ฒฝ

git commit -v --amend

๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹์ค‘ ์—…์ŠคํŠธ๋ฆผ์— ๋จธ์ง€๋˜์ง€ ์•Š์€ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ๋ณด๊ธฐ

git cherry -v master

Author ์ˆ˜์ •ํ•˜๊ธฐ

git commit --amend --author='Author Name <[email protected]>'

๊ธ€๋กœ๋ฒŒ ์„ค์ •์—์„œ ๋ณ€๊ฒฝ๋œ author๋กœ author ์žฌ์„ค์ •ํ•˜๊ธฐ

git commit --amend --reset-author --no-edit

์›๊ฒฉ์ง€ URL ๋ณ€๊ฒฝํ•˜๊ธฐ

git remote set-url origin <URL>

๋ชจ๋“  ์›๊ฒฉ์ง€ ๋ ˆํผ๋Ÿฐ์Šค ๋ฆฌ์ŠคํŠธ ๋‚˜์—ดํ•˜๊ธฐ

git remote

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git remote show

๋ชจ๋“  ๋กœ์ปฌ ๋ฐ ์›๊ฒฉ์ง€ ๋ธŒ๋žœ์น˜ ๋‚˜์—ดํ•˜๊ธฐ

git branch -a

์›๊ฒฉ์ง€ ๋ธŒ๋žœ์น˜๋งŒ ๋‚˜์—ดํ•˜๊ธฐ

git branch -r

ํŒŒ์ผ ๋ณ€๊ฒฝ์‚ฌํ•ญ์˜ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ผ๋ถ€๋งŒ ์Šคํ…Œ์ด์ง•ํ•˜๊ธฐ

git add -p

Git ๋ฐฐ์‹œ ์ž๋™์™„์„ฑ ์‚ฌ์šฉํ•˜๊ธฐ

curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc

2์ฃผ ์ „๋ถ€ํ„ฐ ํ˜„์žฌ๊นŒ์ง€์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ณด๊ธฐ

git log --no-merges --raw --since='2 weeks ago'

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git whatchanged --since='2 weeks ago'

๋งˆ์Šคํ„ฐ๋กœ๋ถ€ํ„ฐ ํฌํฌํ•œ ์ดํ›„์— ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ปค๋ฐ‹ ๋ณด๊ธฐ

git log --no-merges --stat --reverse master..

cherry-pick์„ ์‚ฌ์šฉํ•ด ๋ธŒ๋žœ์น˜๊ฐ„ ์ปค๋ฐ‹ ๊ฐ€์ ธ์˜ค๊ธฐ

git checkout <branch-name> && git cherry-pick <commit-ish>

ํ•ด๋‹น ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋“ค ๊ฒ€์ƒ‰ํ•˜๊ธฐ

git branch -a --contains <commit-ish>

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git branch --contains <commit-ish>

Git ๋ช…๋ น์–ด ๋ณ„์นญ ์ง€์ •

git config --global alias.<handle> <command> 
git config --global alias.st status

์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ํŠธ๋ž˜ํ‚น๋œ ํŒŒ์ผ๋“ค์˜ ์ƒํƒœ ์ €์žฅํ•˜๊ธฐ

git stash

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git stash save

์Šคํ…Œ์ด์ง•๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํŠธ๋ž˜ํ‚น๋œ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ธฐ

git stash -k

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git stash --keep-index
git stash save --keep-index

ํŠธ๋ž˜ํ‚น๋˜์ง€ ์•Š์€ ํŒŒ์ผ๋“ค๊นŒ์ง€ ๋ชจ๋‘ ํฌํ•จํ•ด ํ˜„์žฌ ์ƒํƒœ ์ €์žฅํ•˜๊ธฐ

git stash -u

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git stash save -u
git stash save --include-untracked

ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ธฐ

git stash save <message>

๋ชจ๋“  ๋ฌด์‹œ๋œ ํŒŒ์ผ, ํŠธ๋ž˜ํ‚น๋˜์ง€ ์•Š์€ ํŒŒ์ผ, ํŠธ๋ž˜ํ‚น๋œ ํŒŒ์ผ๋“ค์˜ ํ˜„์žฌ ์ƒํƒœ ์ €์žฅํ•˜๊ธฐ

git stash -a

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git stash --all
git stash save --all

์ €์žฅ๋œ ๋ชจ๋“  ์Šคํƒœ์‹œ ๋ฆฌ์ŠคํŠธ ๋‚˜์—ดํ•˜๊ธฐ

git stash list

์Šคํƒœ์‹œ ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์Šคํƒœ์‹œ ์ ์šฉํ•˜๊ธฐ

git stash apply <[email protected]{n}>

๋งˆ์ง€๋ง‰์œผ๋กœ ์ €์žฅ๋œ ์Šคํƒœ์‹œ ์ƒํƒœ๋ฅผ ์ ์šฉํ•˜๊ณ  ์Šคํƒœ์‹œ ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ญ์ œํ•˜๊ธฐ

git stash pop

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git stash apply [email protected]{0} && git stash drop [email protected]{0}

์ €์žฅ๋œ ๋ชจ๋“  ์Šคํƒœ์‹œ ์‚ญ์ œํ•˜๊ธฐ

git stash clear

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git stash drop <[email protected]{n}>

์Šคํƒœ์‹œ๋กœ๋ถ€ํ„ฐ ๋‹จ์ผ ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ

git checkout <[email protected]{n}> -- <file_path>

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git checkout [email protected]{0} -- <file_path>

ํŠธ๋ž˜ํ‚น๋œ ํŒŒ์ผ๋“ค ๋ชจ๋‘ ๋ณด๊ธฐ

git ls-files -t

ํŠธ๋ž˜ํ‚น๋˜์ง€ ์•Š์€ ํŒŒ์ผ๋“ค ๋ชจ๋‘ ๋ณด๊ธฐ

git ls-files --others

๋ฌด์‹œ๋œ ํŒŒ์ผ๋“ค ๋ชจ๋‘ ๋ณด๊ธฐ

git ls-files --others -i --exclude-standard

์ €์žฅ์†Œ์— ์ƒˆ๋กœ์šด ์›Œํ‚น ํŠธ๋ฆฌ ์ƒ์„ฑํ•˜๊ธฐ (git 2.5)

git worktree add -b <branch-name> <path> <start-point>

HEAD๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์›Œํ‚น ํŠธ๋ฆฌ ์ƒ์„ฑํ•˜๊ธฐ

git worktree add --detach <path> HEAD

ํŒŒ์ผ์„ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์–ธํŠธ๋ž˜ํ‚นํ•˜๊ธฐ

git rm --cached <file_path>

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git rm --cached -r <directory_path>

ํŠธ๋ž˜ํ‚น๋˜์ง€ ์•Š์€ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‹ค์ œ๋กœ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ์–ด๋–ค ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์‚ญ์ œ๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ

git clean -n

ํŠธ๋ž˜ํ‚น๋˜์ง€ ์•Š์€ ํŒŒ์ผ๋“ค ๊ฐ•์ œ๋กœ ์‚ญ์ œํ•˜๊ธฐ

git clean -f

ํŠธ๋ž˜ํ‚น๋˜์ง€ ์•Š์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ฐ•์ œ๋กœ ์‚ญ์ œํ•˜๊ธฐ

git clean -f -d

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git clean -df

๋ชจ๋“  ์„œ๋ธŒ ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

git submodule foreach git pull

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git submodule update --init --recursive
git submodule update --remote

ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์•„์ง ๋งˆ์Šคํ„ฐ์— ๋จธ์ง€๋˜์ง€ ์•Š์€ ๋ชจ๋“  ์ปค๋ฐ‹๋“ค ๋ณด๊ธฐ

git cherry -v master

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git cherry -v master <branch-to-be-merged>

๋ธŒ๋žœ์น˜๋ช… ์ˆ˜์ •ํ•˜๊ธฐ

git branch -m <new-branch-name>

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git branch -m [<old-branch-name>] <new-branch-name>

'feature' ๋ธŒ๋žœ์น˜๋ฅผ ๋งˆ์Šคํ„ฐ์— ๋ฆฌ๋ฒ ์ด์Šคํ•œ ํ›„ ๋งˆ์Šคํ„ฐ์— ๋จธ์ง€ํ•˜๊ธฐ

git rebase master feature && git checkout master && git merge -

๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜ ์•„์นด์ด๋ธŒ

git archive master --format=zip --output=master.zip

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ด์ „ ์ปค๋ฐ‹ ๋ณ€๊ฒฝํ•˜๊ธฐ

git add --all && git commit --amend --no-edit

์›๊ฒฉ์ง€์—์„œ ์‚ญ์ œ๋œ ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ๋ ˆํผ๋Ÿฐ์Šค ์ œ๊ฑฐํ•˜๊ธฐ

git fetch -p

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git remote prune origin

์ฒซ ๋ฆฌ๋น„์ „์˜ ์ปค๋ฐ‹ ํ•ด์‹œ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

 git rev-list --reverse HEAD | head -1

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git rev-list --max-parents=0 HEAD
git log --pretty=oneline | tail -1 | cut -c 1-40
git log --pretty=oneline --reverse | head -1 | cut -c 1-40

๋ฒ„์ „ ํŠธ๋ฆฌ ์‹œ๊ฐํ™”

git log --pretty=oneline --graph --decorate --all

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

gitk --all

ํŠธ๋ž˜ํ‚น๋œ ํ•˜์œ„ํด๋”๋ฅผ gh-pages ๋ธŒ๋žœ์น˜๋กœ ๋ฐฐํฌํ•˜๊ธฐ

git subtree push --prefix subfolder_name origin gh-pages

subtree๋ฅผ ์‚ฌ์šฉํ•ด ์ €์žฅ์†Œ์— ํ”„๋กœ์ ํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ

git subtree add --prefix=<directory_name>/<project_name> --squash [email protected]:<username>/<project_name>.git master

subtree๋ฅผ ์‚ฌ์šฉํ•ด ๊ด€๋ จ๋œ ํ”„๋กœ์ ํŠธ์˜ ์ตœ์‹  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅ์†Œ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ

git subtree pull --prefix=<directory_name>/<project_name> --squash [email protected]:<username>/<project_name>.git master

๋ธŒ๋žœ์น˜๋ฅผ ํžˆ์Šคํ† ๋ฆฌ์™€ ํ•จ๊ป˜ ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๊ธฐ

git bundle create <file> <branch-name>

๋ฒˆ๋“ค ๊ฐ€์ ธ์˜ค๊ธฐ

git clone repo.bundle <repo-dir> -b <branch-name>

ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ช… ๊ฐ€์ ธ์˜ค๊ธฐ

git rev-parse --abbrev-ref HEAD

์ปค๋ฐ‹์‹œ ํŒŒ์ผ ๋ฌด์‹œํ•˜๊ธฐ (์˜ˆ๋ฅผ ๋“ค์–ด, Changelog ํŒŒ์ผ)

git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog

๋ฆฌ๋ฒ ์ด์Šค ์ „์— ๋ณ€๊ฒฝ์‚ฌํ•ญ ์Šคํƒœ์‹œํ•˜๊ธฐ

git rebase --autostash

ID๋กœ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ

git fetch origin pull/<id>/head:<branch-name>

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git pull origin pull/<id>/head:<branch-name>

ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ํƒœ๊ทธ ๋ณด๊ธฐ

git describe --tags --abbrev=0

diff ์›Œ๋“œ ๋‹จ์œ„๋กœ ๋ณด๊ธฐ

git diff --word-diff

diff ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ณด๊ธฐ

git difftool -t <commit1> <commit2> <path>

ํŠธ๋ž˜ํ‚น๋œ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฌด์‹œํ•˜๊ธฐ

git update-index --assume-unchanged <file_name>

assume-unchanged ๋˜๋Œ๋ฆฌ๊ธฐ

git update-index --no-assume-unchanged <file_name>

.gitignore์— ๋ช…์‹œ๋œ ํŒŒ์ผ๋“ค ์‚ญ์ œํ•˜๊ธฐ

git clean -X -f

์‚ญ์ œ๋œ ํŒŒ์ผ ๋ณต๊ตฌํ•˜๊ธฐ

git checkout <deleting_commit>^ -- <file_path>

ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ์˜ ํŒŒ์ผ๋กœ ๋ณต๊ตฌํ•˜๊ธฐ

git checkout <commit-ish> -- <file_path>

pull์‹œ ๋จธ์ง€ํ•˜๋Š” ๋Œ€์‹  ํ•ญ์ƒ ๋ฆฌ๋ฒ ์ด์Šค ํ•˜๊ธฐ

git config --global pull.rebase true

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

#git < 1.7.9
git config --global branch.autosetuprebase always

๋ชจ๋“  ๋ณ„์นญ๊ณผ ์„ค์ •๊ฐ’๋“ค ๋‚˜์—ดํ•˜๊ธฐ

git config --list

๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„ ํ™œ์„ฑํ™”

git config --global core.ignorecase false

์ปค์Šคํ…€ ์—๋””ํ„ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ

git config --global core.editor '$EDITOR'

์˜คํƒ€ ์ž๋™ ์ˆ˜์ • ํ™œ์„ฑํ™”

git config --global help.autocorrect 1

๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์–ด๋–ค ๋ฆด๋ฆฌ์ฆˆ์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

git name-rev --name-only <SHA-1>

๋ช…๋ น์–ด ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ (dry-run ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๋ช…๋ น์–ด์—์„œ ๊ฐ€๋Šฅ)

git clean -fd --dry-run

์ปค๋ฐ‹์ด ์ด์ „ ์ปค๋ฐ‹์˜ ์ˆ˜์ • ๋ฒ„์ „์ž„์„ ํ‘œ์‹œํ•˜๊ธฐ

git commit --fixup <SHA-1>

fixup ์ปค๋ฐ‹์„ ์ผ๋ฐ˜ ์ปค๋ฐ‹์œผ๋กœ ์Šค์ฟผ์‹œํ•˜๊ธฐ

git rebase -i --autosquash

์ปค๋ฐ‹์‹œ ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ๋“ค ์Šคํ‚ตํ•˜๊ธฐ

git commit --only <file_path>

๋Œ€ํ™”ํ˜•์œผ๋กœ ์Šคํ…Œ์ด์ง•ํ•˜๊ธฐ

git add -i

๋ฌด์‹œ๋œ ํŒŒ์ผ๋“ค ๋‚˜์—ดํ•˜๊ธฐ

git check-ignore *

๋ฌด์‹œ๋œ ํŒŒ์ผ๋“ค ์ƒํƒœ ์ถœ๋ ฅ

git status --ignored

Branch2์—๋Š” ์—†๊ณ  Branch1์—๋งŒ ์žˆ๋Š” ์ปค๋ฐ‹๋“ค ๋‚˜์—ดํ•˜๊ธฐ

git log Branch1 ^Branch2

๋งˆ์ง€๋ง‰ n๊ฐœ์˜ ์ปค๋ฐ‹ ๋‚˜์—ดํ•˜๊ธฐ

git log -<n>

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git log -n <n>

์ด์ „์— ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ–ˆ๋˜ ๋ฐฉ๋ฒ•์„ ๊ธฐ๋กํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜๊ธฐ

git config --global rerere.enabled 1

๋ชจ๋“  ์ถฉ๋Œ๋œ ํŒŒ์ผ๋“ค ์—๋””ํ„ฐ๋กœ ์—ด๊ธฐ

git diff --name-only | uniq | xargs $EDITOR

unpacked ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฐฏ์ˆ˜์™€ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ณด๊ธฐ

git count-objects --human-readable

์˜ค๋ธŒ์ ํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค ์ œ๊ฑฐํ•˜๊ธฐ

git gc --prune=now --aggressive

gitweb์œผ๋กœ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ ํƒ์ƒ‰ํ•˜๊ธฐ

git instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]

์ปค๋ฐ‹ ๋กœ๊ทธ์—์„œ GPG ์‹œ๊ทธ๋‹ˆ์ณ ๋ณด๊ธฐ

git log --show-signature

๊ธ€๋กœ๋ฒŒ ์„ค์ •์—์„œ ์—”ํŠธ๋ฆฌ ์ œ๊ฑฐํ•˜๊ธฐ

git config --global --unset <entry-name>

ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์—†๋Š” ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋กœ ์ฒดํฌ์•„์›ƒํ•˜๊ธฐ

git checkout --orphan <branch_name>

๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์—์„œ ํŒŒ์ผ๋‚ด์šฉ ๊ฐ€์ ธ์˜ค๊ธฐ

git show <branch_name>:<file_name>

๋ฃจํŠธ ์ปค๋ฐ‹๊ณผ ๋จธ์ง€ ์ปค๋ฐ‹๋งŒ ๋‚˜์—ดํ•˜๊ธฐ

git log --first-parent

๋Œ€ํ™”ํ˜• ๋ฆฌ๋ฒ ์ด์Šค๋กœ ์ด์ „ ๋‘ ์ปค๋ฐ‹ ์ˆ˜์ •ํ•˜๊ธฐ

git rebase --interactive HEAD~2

์ž‘์—…์ค‘์ธ ๋ธŒ๋žœ์น˜๋“ค ๋ชจ๋‘ ๋‚˜์—ดํ•˜๊ธฐ

git checkout master && git branch --no-merged

์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ์ข‹์€/์•ˆ์ข‹์€ ์ปค๋ฐ‹ ๊ฒ€์ƒ‰ํ•˜๊ธฐ

git bisect start                    # Search start 
git bisect bad                      # Set point to bad commit 
git bisect good v2.6.13-rc2         # Set point to good commit|tag 
git bisect bad                      # Say current state is bad 
git bisect good                     # Say current state is good 
git bisect reset                    # Finish search 

pre-commit๊ณผ commit-msg ๊นƒ ํ›„ํ‚น ์šฐํšŒํ•˜๊ธฐ

git commit --no-verify

ํŠน์ • ํŒŒ์ผ์— ๋Œ€ํ•œ ์ปค๋ฐ‹๊ณผ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋‚˜์—ดํ•˜๊ธฐ (์ด๋ฆ„์ด ๋ฐ”๋€ ํŒŒ์ผ๋„ ์ถ”์ )

git log --follow -p -- <file_path>

๋‹จ์ผ ๋ธŒ๋žœ์น˜ ํด๋ก 

git clone -b <branch-name> --single-branch https://github.com/user/repo.git

์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์Šค์œ„์นญ

git checkout -b <branch-name>

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git branch <branch-name> && git checkout <branch-name>

์ปค๋ฐ‹์‹œ ํŒŒ์ผ ๋ชจ๋“œ ๋ณ€๊ฒฝ ๋ฌด์‹œ

git config core.fileMode false

Git ํ„ฐ๋ฏธ๋„ ์ƒ‰์ƒ ์ถœ๋ ฅ ๋น„ํ™œ์„ฑํ™”

git config --global color.ui false

ํŠน์ • ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ƒ‰์ƒ ์„ค์ • ์ง€์ •ํ•˜๊ธฐ

git config --global <specific command e.g branch, diff> <true, false or always>

๋ชจ๋“  ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋ฅผ ์ตœ๊ทผ ์ปค๋ฐ‹ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด ๋‚˜์—ดํ•˜๊ธฐ

git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/

ํŠธ๋ž˜ํ‚น๋œ ํŒŒ์ผ์—์„œ ํŒจํ„ด(์ •๊ทœ์‹์ด๋‚˜ ๋ฌธ์ž์—ด)์— ๋งค์นญ๋˜๋Š” ๋ผ์ธ ๊ฒ€์ƒ‰

git grep --heading --line-number 'foo bar'

์ €์žฅ์†Œ์˜ ์–•์€ ์นดํ”ผ ๋ฒ„์ „ ํด๋ก ํ•˜๊ธฐ

git clone https://github.com/user/repo.git --depth 1

๋ชจ๋“  ๋ธŒ๋žœ์น˜์—์„œ ์ฃผ์–ด์ง„ ํ…์ŠคํŠธ๋กœ ์ปค๋ฐ‹ ๋กœ๊ทธ ๊ฒ€์ƒ‰ํ•˜๊ธฐ

git log --all --grep='<given-text>'

๋ธŒ๋žœ์น˜์˜ ์ฒซ ์ปค๋ฐ‹ ๊ฐ€์ ธ์˜ค๊ธฐ (๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ)

git log master..<branch-name> --oneline | tail -1

์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ๋“ค ์–ธ์Šคํ…Œ์ด์ง•ํ•˜๊ธฐ

git reset HEAD <file-name>

์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ ํ‘ธ์‹œํ•˜๊ธฐ

git push -f <remote-name> <branch-name>

์ €์žฅ์†Œ๋ช… ์ถ”๊ฐ€ํ•˜๊ธฐ

git remote add <remote-nickname> <remote-url>

์ฃผ์–ด์ง„ ํŒŒ์ผ์˜ ๊ฐ ๋ผ์ธ๋ณ„ author, ์‹œ๊ฐ„ ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข… ๋ฆฌ๋น„์ „๋ช… ๋ณด๊ธฐ

git blame <file-name>

Author์™€ ์ œ๋ชฉ์œผ๋กœ ์ปค๋ฐ‹ ๊ทธ๋ฃนํ•‘ํ•˜๊ธฐ

git shortlog

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ๊ฐ•์ œ ํ‘ธ์‹œํ•˜๊ธฐ

git push --force-with-lease <remote-name> <branch-name>

ํŠน์ • author๊ฐ€ ๊ธฐ์—ฌํ•œ ๋ผ์ธ์ˆ˜ ๋ณด๊ธฐ

git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += <!-- @doxie.inject start -->; subs += <!-- @doxie.inject end -->; loc += <!-- @doxie.inject start --> - <!-- @doxie.inject end --> } END { printf "added lines: %s removed lines: %s total lines: %s
", add, subs, loc }' -

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += <!-- @doxie.inject start -->; subs += <!-- @doxie.inject end -->; loc += <!-- @doxie.inject start --> - <!-- @doxie.inject end --> } END { printf "added lines: %s, removed lines: %s, total lines: %s
", add, subs, loc }' - # on Mac OSX

Revert: ๋จธ์ง€ ๋ณต๊ตฌํ•˜๊ธฐ

git revert -m 1 <commit-ish>

ํŠน์ • ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ์ˆ˜ ์ถœ๋ ฅํ•˜๊ธฐ

git rev-list --count <branch-name>

๋ณ„์นญ: git undo

git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'

์˜ค๋ธŒ์ ํŠธ์— ๋…ธํŠธ(๋ฉ”๋ชจ) ์ถ”๊ฐ€ํ•˜๊ธฐ

git notes add -m 'Note on the previous commit....'

๋ชจ๋“  ๊นƒ ๋…ธํŠธ ๋ณด๊ธฐ

git log --show-notes='*'

๋‹ค๋ฅธ ์ €์žฅ์†Œ์— ์žˆ๋Š” ์ปค๋ฐ‹ ์ ์šฉํ•˜๊ธฐ

git --git-dir=<source-dir>/.git format-patch -k -1 --stdout <SHA1> | git am -3 -k

ํŽ˜์น˜ ๋ ˆํผ๋Ÿฐ์Šค ์ง€์ •ํ•˜๊ธฐ

git fetch origin master:refs/remotes/origin/mymaster

๋‘ ๋ธŒ๋žœ์น˜์˜ ๊ณตํ†ต ์กฐ์ƒ ์ปค๋ฐ‹ ์ฐพ๊ธฐ

diff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1

ํ‘ธ์‹œ๋˜์ง€ ์•Š์€ ์ปค๋ฐ‹๋“ค ๋‚˜์—ดํ•˜๊ธฐ

git log --branches --not --remotes

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git log @{u}..
git cherry -v

๊ณต๋ฐฑ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”๊ฐ€ํ•˜๊ธฐ

git diff --ignore-all-space | git apply --cached

๊นƒ ์„ค์ • [๋กœ์ปฌ/๊ธ€๋กœ๋ฒŒ] ์ˆ˜์ •ํ•˜๊ธฐ

git config [--global] --edit

ํŠน์ • ๊ตฌ๊ฐ„์—์„œ blame ์ •๋ณด ๋ณด๊ธฐ

git blame -L <start>,<end>

Git์˜ ๋…ผ๋ฆฌ์  ๋ณ€์ˆ˜ ๋ณด๊ธฐ

git var -l | <variable>

ํŒจ์น˜ ํŒŒ์ผ ๋ฏธ๋ฆฌ ํฌ๋งทํŒ…ํ•˜๊ธฐ

git format-patch -M upstream..topic

์ €์žฅ์†Œ๋ช… ๊ฐ€์ ธ์˜ค๊ธฐ

git rev-parse --show-toplevel

ํŠน์ • ๋‚ ์งœ ๊ตฌ๊ฐ„ ์‚ฌ์ด์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ ์ถœ๋ ฅํ•˜๊ธฐ

git log --since='FEB 1 2017' --until='FEB 14 2017'

๋กœ๊ทธ์—์„œ author ์ œ์™ธํ•˜๊ธฐ

git log --perl-regexp --author='^((?!excluded-author-regex).*)

๋ธŒ๋žœ์น˜์˜ ์ˆ˜์ •์‚ฌํ•ญ ์š”์•ฝํ•˜๊ธฐ

git request-pull v1.0 https://git.ko.xz/project master:for-linus

์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ๋ ˆํผ๋Ÿฐ์Šค ๋‚˜์—ดํ•˜๊ธฐ

git ls-remote git://git.kernel.org/pub/scm/git/git.git

ํŠธ๋ž˜ํ‚น๋˜์ง€ ์•Š์€ ํŒŒ์ผ๋“ค ๋ฐฑ์—…ํ•˜๊ธฐ

git ls-files --others -i --exclude-standard | xargs zip untracked.zip

๋ชจ๋“  git ๋ช…๋ น์–ด ๋ณ„์นญ ๋‚˜์—ดํ•˜๊ธฐ

git config -l | grep alias | sed 's/^alias\.//g'

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

git config -l | grep alias | cut -d '.' -f 2

git ์ƒํƒœ ๊ฐ„๋žตํ•˜๊ฒŒ ๋ณด๊ธฐ

git status --short --branch

ํ•˜๋ฃจ ์ „์˜ ์ปค๋ฐ‹์œผ๋กœ ์ฒดํฌ์•„์›ƒํ•˜๊ธฐ

git checkout [email protected]{yesterday}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].