git tips의 한국어 버전 문서입니다.
English | 中文 | Русский | Tiếng Việt | 日本語 | नेपाली | Polski
참고로 모든 명령어는 다음 버전에서 테스트 되었습니다:
git version 2.7.4 (Apple Git-66).
- 20개 내외의 명령어로 Git 사용하기
- Git과 함께 제공되는 유용한 가이드라인 보기
- 내용으로 변경사항 검색
- 원격지 동기화 및 로컬 변경사항 덮어쓰기
- 특정 커밋까지의 모든 파일 나열하기
- 첫 번째 커밋 초기화
- 충돌된 모든 파일 나열하기
- 특정 커밋에서 변경된 모든 파일 나열하기
- 마지막 커밋 이후로 스테이징되지 않은 변경사항 보기
- 커밋을 하기 위해 스테이징된 변경사항 보기
- 스테이징된 변경사항과 스테이징되지 않은 변경사항 모두 보기
- 이미 마스터 브랜치에 머지된 모든 브랜치 나열하기
- 이전 브랜치로 전환하기
- 이미 마스터 브랜치에 머지된 모든 브랜치들 삭제하기
- 모든 브랜치들 및 그 브랜치들의 업스트림과 마지막 커밋 나열하기
- 업스트림 브랜치 설정 (트래킹)
- 로컬 브랜치 삭제
- 원격 브랜치 삭제
- 로컬 태그 삭제
- 원격 태그 삭제
- 로컬 변경사항을 헤드의 마지막 내용으로 되돌리기
- Revert: 새로운 커밋을 생성하면서 커밋 되돌리기
- Reset: 커밋 제거 (프라이빗 브랜치에서만 사용하길 권고)
- 이전 커밋 메시지 변경
- 브랜치의 커밋중 업스트림에 머지되지 않은 커밋 히스토리 보기
- Author 수정하기
- 글로벌 설정에서 변경된 author로 author 재설정하기
- 원격지 URL 변경하기
- 모든 원격지 레퍼런스 리스트 나열하기
- 모든 로컬 및 원격지 브랜치 나열하기
- 원격지 브랜치만 나열하기
- 파일 변경사항의 전체가 아닌 일부만 스테이징하기
- git 배시 자동완성 사용하기
- 2주 전부터 현재까지의 변경사항 보기
- 마스터로부터 포크한 이후에 생성된 모든 커밋 보기
- cherry-pick을 사용해 브랜치간 커밋 가져오기
- 해당 커밋 해시를 가지고 있는 브랜치들 검색하기
- Git 명령어 별칭 지정
- 커밋하지 않은 트래킹된 파일들의 상태 저장하기
- 스테이징되지 않은 변경사항들의 현재 상태를 트래킹된 파일로 저장하기
- 트래킹되지 않은 파일들까지 모두 포함해 현재 상태 저장하기
- 현재 상태를 메시지와 함께 저장하기
- 모든 무시된 파일, 트래킹되지 않은 파일, 트래킹된 파일들의 현재 상태 저장하기
- 저장된 모든 스태시 리스트 나열하기
- 스태시 리스트에서 삭제하지 않고 스태시 적용하기
- 마지막으로 저장된 스태시 상태를 적용하고 스태시 리스트에서 삭제하기
- 저장된 모든 스태시 삭제하기
- 스태시로부터 단일 파일 가져오기
- 트래킹된 파일들 모두 보기
- 트래킹되지 않은 모든 파일 보기
- 무시된 파일들 모두 보기
- 저장소에 새로운 워킹 트리 생성하기 (git 2.5)
- HEAD로부터 새로운 워킹 트리 생성하기
- 파일을 삭제하지 않고 언트래킹하기
- 트래킹되지 않은 파일/디렉토리를 실제로 삭제하기 전에 어떤 파일/디렉토리가 삭제되는지 테스트 해보기
- 트래킹되지 않은 파일들 강제로 삭제하기
- 트래킹되지 않은 디렉토리 강제로 삭제하기
- 모든 서브 모듈 업데이트하기
- 현재 브랜치에서 아직 마스터에 머지되지 않은 모든 커밋들 보기
- 브랜치명 수정하기
- 'feature' 브랜치를 마스터에 리베이스한 후 마스터에 머지하기
- 마스터 브랜치 아카이브
- 커밋 메시지는 변경하지 않고 이전 커밋 변경하기
- 원격지에서 삭제된 원격 브랜치 레퍼런스 제거하기
- 첫 리비전의 커밋 해시값 가져오기
- 버전 트리 시각화
- 트래킹된 하위폴더를 gh-pages 브랜치로 배포하기
- subtree를 사용해 저장소에 프로젝트 추가하기
- subtree를 사용해 관련된 프로젝트의 최신 변경사항을 저장소로 가져오기
- 브랜치를 히스토리와 함께 파일로 추출하기
- 번들 가져오기
- 현재 브랜치명 가져오기
- 커밋시 파일 무시하기 (예를 들어, Changelog 파일)
- 리베이스 전에 변경사항 스태시하기
- ID로 풀 리퀘스트를 로컬 저장소로 가져오기
- 현재 브랜치의 가장 최근 태그 보기
- diff 워드 단위로 보기
- diff 도구를 사용해 변경사항 보기
- 트래킹된 파일의 변경사항 무시하기
- assume-unchanged 되돌리기
.gitignore에 명시된 파일들 삭제하기- 삭제된 파일 복구하기
- 특정 커밋으로의 파일로 복구하기
- pull시 머지하는 대신 항상 리베이스 하기
- 모든 별칭과 설정값들 나열하기
- 대소문자 구별 활성화
- 커스텀 에디터 추가하기
- 오타 자동 수정 활성화
- 변경사항이 어떤 릴리즈에 속하는지 확인하기
- 명령어 테스트 해보기 (dry-run 플래그를 지원하는 모든 명령어에서 가능)
- 커밋이 이전 커밋의 수정 버전임을 표시하기
- fixup 커밋을 일반 커밋으로 스쿼시하기
- 커밋시 스테이징된 파일들 스킵하기
- 대화형으로 스테이징하기
- 무시된 파일들 나열하기
- 무시된 파일들 상태 출력
- Branch2에는 없고 Branch1에만 있는 커밋들 나열하기
- 마지막 n개의 커밋 나열하기
- 이전에 충돌을 해결했던 방법을 기록하고 재사용하기
- 모든 충돌된 파일들 에디터로 열기
- unpacked 오브젝트의 갯수와 디스크 사용량 보기
- 오브젝트 데이터베이스에서 도달할 수 없는 오브젝트들 제거하기
- gitweb으로 워킹 디렉토리 탐색하기
- 커밋 로그에서 GPG 시그니쳐 보기
- 글로벌 설정에서 엔트리 제거하기
- 히스토리가 없는 새로운 브랜치로 체크아웃하기
- 다른 브랜치에서 파일내용 가져오기
- 루트 커밋과 머지 커밋만 나열하기
- 대화형 리베이스로 이전 두 커밋 수정하기
- 작업중인 브랜치들 모두 나열하기
- 이진 탐색으로 좋은/안좋은 커밋 검색하기
- pre-commit과 commit-msg 깃 후킹 우회하기
- 특정 파일에 대한 커밋과 변경사항 나열하기 (이름이 바뀐 파일도 추적)
- 단일 브랜치 클론
- 새로운 브랜치 생성과 동시에 스위칭
- 커밋시 파일 모드 변경 무시
- Git 터미널 색상 출력 비활성화
- 특정 명령어에 대한 색상 설정 지정하기
- 모든 로컬 브랜치를 최근 커밋 날짜를 기준으로 정렬해 나열하기
- 트래킹된 파일에서 패턴(정규식이나 문자열)에 매칭되는 라인 검색
- 저장소의 얕은 카피 버전 클론하기
- 모든 브랜치에서 주어진 텍스트로 커밋 로그 검색하기
- 브랜치의 첫 커밋 가져오기 (마스터 브랜치로부터 시작된)
- 스테이징된 파일들 언스테이징하기
- 원격 저장소에 강제 푸시하기
- 저장소명 추가하기
- 주어진 파일의 각 라인별 author, 시간 그리고 최종 리비전명 보기
- Author와 제목으로 커밋 그룹핑하기
- 다른 사람이 작업한 내용을 덮어쓰지 않고 강제 푸시하기
- 특정 author가 기여한 라인수 보기
- Revert: 머지 복구하기
- 특정 브랜치의 커밋 수 출력하기
- 별칭: git undo
- 오브젝트에 노트(메모) 추가하기
- 모든 깃 노트 보기
- 다른 저장소에 있는 커밋 적용하기
- 페치 레퍼런스 지정하기
- 두 브랜치의 공통 조상 커밋 찾기
- 푸시되지 않은 커밋들 나열하기
- 공백 변경사항을 제외한 모든 변경사항 추가하기
- 깃 설정 [로컬/글로벌] 수정하기
- 특정 구간에서 blame 정보 보기
- Git의 논리적 변수 보기
- 패치 파일 미리 포맷팅하기
- 저장소명 가져오기
- 특정 날짜 구간 사이의 커밋 로그 출력하기
- 로그에서 author 제외하기
- 브랜치의 수정사항 요약하기
- 원격 저장소의 모든 레퍼런스 나열하기
- 트래킹되지 않은 파일들 백업하기
- 모든 git 명령어 별칭 나열하기
- git 상태 간략하게 보기
- 하루 전의 커밋으로 체크아웃하기
- 새로운 로컬 브랜치를 원격 저장소에 푸시하고 트래킹하기
- 브랜치 베이스 변경하기
- 원격 저장소에 HTTPs 대신 SSH 사용하기
- 최신 커밋에 서브모듈 업데이트하기
- LF에서 CRLF로의 자동 변환 막기
git help everydaygit help -ggit log -S'<a term in the source>'git fetch origin && git reset --hard origin/master && git clean -f -dgit ls-tree --name-only -r <commit-ish>git update-ref -d HEADgit diff --name-only --diff-filter=Ugit diff-tree --no-commit-id --name-only -r <commit-ish>git diffgit diff --cached다른 방법:
git diff --stagedgit diff HEADgit branch --merged mastergit 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 outgit branch -vvgit branch -u origin/mybranchgit 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>git revert <commit-ish>git reset <commit-ish>git commit -v --amendgit cherry -v mastergit commit --amend --author='Author Name <email@address.com>'git commit --amend --reset-author --no-editgit remote set-url origin <URL>git remote다른 방법:
git remote showgit branch -agit branch -rgit add -pcurl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrcgit log --no-merges --raw --since='2 weeks ago'다른 방법:
git whatchanged --since='2 weeks ago'git log --no-merges --stat --reverse master..git checkout <branch-name> && git cherry-pick <commit-ish>git branch -a --contains <commit-ish>다른 방법:
git branch --contains <commit-ish>git config --global alias.<handle> <command>
git config --global alias.st statusgit stash다른 방법:
git stash savegit stash -k다른 방법:
git stash --keep-indexgit stash save --keep-indexgit stash -u다른 방법:
git stash save -ugit stash save --include-untrackedgit stash save <message>git stash -a다른 방법:
git stash --allgit stash save --allgit stash listgit 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 -tgit ls-files --othersgit ls-files --others -i --exclude-standardgit worktree add -b <branch-name> <path> <start-point>git worktree add --detach <path> HEADgit rm --cached <file_path>다른 방법:
git rm --cached -r <directory_path>git clean -ngit clean -fgit clean -f -d다른 방법:
git clean -dfgit submodule foreach git pull다른 방법:
git submodule update --init --recursivegit submodule update --remotegit 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>git rebase master feature && git checkout master && git merge -git archive master --format=zip --output=master.zipgit add --all && git commit --amend --no-editgit fetch -p다른 방법:
git remote prune origin git rev-list --reverse HEAD | head -1다른 방법:
git rev-list --max-parents=0 HEADgit log --pretty=oneline | tail -1 | cut -c 1-40git log --pretty=oneline --reverse | head -1 | cut -c 1-40git log --pretty=oneline --graph --decorate --all다른 방법:
gitk --allgit subtree push --prefix subfolder_name origin gh-pagesgit subtree add --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git mastergit subtree pull --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git mastergit bundle create <file> <branch-name>git clone repo.bundle <repo-dir> -b <branch-name>git rev-parse --abbrev-ref HEADgit update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changeloggit rebase --autostashgit fetch origin pull/<id>/head:<branch-name>다른 방법:
git pull origin pull/<id>/head:<branch-name>git describe --tags --abbrev=0git diff --word-diffgit difftool -t <commit1> <commit2> <path>git update-index --assume-unchanged <file_name>git update-index --no-assume-unchanged <file_name>git clean -X -fgit checkout <deleting_commit>^ -- <file_path>git checkout <commit-ish> -- <file_path>git config --global pull.rebase true다른 방법:
#git < 1.7.9
git config --global branch.autosetuprebase alwaysgit config --listgit config --global core.ignorecase falsegit config --global core.editor '$EDITOR'git config --global help.autocorrect 1git name-rev --name-only <SHA-1>git clean -fd --dry-rungit commit --fixup <SHA-1>git rebase -i --autosquashgit commit --only <file_path>git add -igit check-ignore *git status --ignoredgit log Branch1 ^Branch2git log -<n>다른 방법:
git log -n <n>git config --global rerere.enabled 1git diff --name-only | uniq | xargs $EDITORgit count-objects --human-readablegit gc --prune=now --aggressivegit instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]git log --show-signaturegit config --global --unset <entry-name>git checkout --orphan <branch_name>git show <branch_name>:<file_name>git log --first-parentgit rebase --interactive HEAD~2git checkout master && git branch --no-mergedgit 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
git commit --no-verifygit log --follow -p -- <file_path>git clone -b <branch-name> --single-branch https://github.com/user/repo.gitgit checkout -b <branch-name>다른 방법:
git branch <branch-name> && git checkout <branch-name>git config core.fileMode falsegit config --global color.ui falsegit 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 1git log --all --grep='<given-text>'git log master..<branch-name> --oneline | tail -1git reset HEAD <file-name>git push -f <remote-name> <branch-name>git remote add <remote-nickname> <remote-url>git blame <file-name>git shortloggit push --force-with-lease <remote-name> <branch-name>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 OSXgit revert -m 1 <commit-ish>git rev-list --count <branch-name>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 -kgit fetch origin master:refs/remotes/origin/mymasterdiff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1git log --branches --not --remotes다른 방법:
git log @{u}..git cherry -vgit diff --ignore-all-space | git apply --cachedgit config [--global] --editgit blame -L <start>,<end>git var -l | <variable>git format-patch -M upstream..topicgit rev-parse --show-toplevelgit log --since='FEB 1 2017' --until='FEB 14 2017'git log --perl-regexp --author='^((?!excluded-author-regex).*)
git request-pull v1.0 https://git.ko.xz/project master:for-linusgit ls-remote git://git.kernel.org/pub/scm/git/git.gitgit ls-files --others -i --exclude-standard | xargs zip untracked.zipgit config -l | grep alias | sed 's/^alias\.//g'다른 방법:
git config -l | grep alias | cut -d '.' -f 2git status --short --branchgit checkout master@{yesterday}git push -u origin <branch_name>git rebase --onto <new_base> <old_base>git config --global url.'git@github.com:'.insteadOf 'https://github.com/'cd <path-to-submodule>
git pull origin <branch>
cd <root-of-your-main-project>
git add <path-to-submodule>
git commit -m "submodule updated"git config --global core.autocrlf false