📚 Git 팁 모음집 (https://github.com/git-tips/tips 한국어 버전)
Switch branches/tags
Nothing to show
Clone or download
Latest commit d95b3e7 Mar 17, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md Update README.md Mar 17, 2018

README.md

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@address.com>'

글로벌 설정에서 변경된 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 <stash@{n}>

마지막으로 저장된 스태시 상태를 적용하고 스태시 리스트에서 삭제하기

git stash pop

다른 방법:

git stash apply stash@{0} && git stash drop stash@{0}

저장된 모든 스태시 삭제하기

git stash clear

다른 방법:

git stash drop <stash@{n}>

스태시로부터 단일 파일 가져오기

git checkout <stash@{n}> -- <file_path>

다른 방법:

git checkout stash@{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 git@github.com:<username>/<project_name>.git master

subtree를 사용해 관련된 프로젝트의 최신 변경사항을 저장소로 가져오기

git subtree pull --prefix=<directory_name>/<project_name> --squash git@github.com:<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 master@{yesterday}