Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mingrammer/git-tips

:books: Git 팁 모음집 (https://github.com/git-tips/tips 한국어 버전)
https://github.com/mingrammer/git-tips

git git-tips

Last synced: 6 days ago
JSON representation

:books: Git 팁 모음집 (https://github.com/git-tips/tips 한국어 버전)

Awesome Lists containing this project

README

        

# Git Tips
> [git tips](https://github.com/git-tips/tips)의 한국어 버전 문서입니다.

[English](http://git.io/git-tips) | [中文](https://github.com/521xueweihan/git-tips) | [Русский](https://github.com/Imangazaliev/git-tips) | [Tiếng Việt](https://github.com/hprobotic/git-tips) | [日本語](https://github.com/isotai/git-tips) | [नेपाली](https://github.com/amarduwal/git-tips) | [Polski](https://github.com/mbiesiad/tips)

## 팁 툴

* [git-tip](https://www.npmjs.com/package/git-tip) - 아래에 나열된 팁들을 사용할 수 있는 CLI 툴 ([도커 컨테이너](https://github.com/djoudi5/docker-git-tip))

## 목차

> 참고로 모든 명령어는 다음 버전에서 테스트 되었습니다: `git version 2.7.4 (Apple Git-66)`.

* [20개 내외의 명령어로 Git 사용하기](#20개-내외의-명령어로-git-사용하기)
* [Git과 함께 제공되는 유용한 가이드라인 보기](#git과-함께-제공되는-유용한-가이드라인-보기)
* [내용으로 변경사항 검색](#내용으로-변경사항-검색)
* [원격지 동기화 및 로컬 변경사항 덮어쓰기](#원격지-동기화-및-로컬-변경사항-덮어쓰기)
* [특정 커밋까지의 모든 파일 나열하기](#특정-커밋까지의-모든-파일-나열하기)
* [첫 번째 커밋 초기화](#첫-번째-커밋-초기화)
* [충돌된 모든 파일 나열하기](#충돌된-모든-파일-나열하기)
* [특정 커밋에서 변경된 모든 파일 나열하기](#특정-커밋에서-변경된-모든-파일-나열하기)
* [마지막 커밋 이후로 스테이징되지 않은 변경사항 보기](#마지막-커밋-이후로-스테이징되지-않은-변경사항-보기)
* [커밋을 하기 위해 스테이징된 변경사항 보기](#커밋을-하기-위해-스테이징된-변경사항-보기)
* [스테이징된 변경사항과 스테이징되지 않은 변경사항 모두 보기](#스테이징된-변경사항과-스테이징되지-않은-변경사항-모두-보기)
* [이미 마스터 브랜치에 머지된 모든 브랜치 나열하기](#이미-마스터-브랜치에-머지된-모든-브랜치-나열하기)
* [이전 브랜치로 전환하기](#이전-브랜치로-전환하기)
* [이미 마스터 브랜치에 머지된 모든 브랜치들 삭제하기](#이미-마스터-브랜치에-머지된-모든-브랜치들-삭제하기)
* [모든 브랜치들 및 그 브랜치들의 업스트림과 마지막 커밋 나열하기](#모든-브랜치들-및-그-브랜치들의-업스트림과-마지막-커밋-나열하기)
* [업스트림 브랜치 설정 (트래킹)](#업스트림-브랜치-설정-트래킹)
* [로컬 브랜치 삭제](#로컬-브랜치-삭제)
* [원격 브랜치 삭제](#원격-브랜치-삭제)
* [로컬 태그 삭제](#로컬-태그-삭제)
* [원격 태그 삭제](#원격-태그-삭제)
* [로컬 변경사항을 헤드의 마지막 내용으로 되돌리기](#로컬-변경사항을-헤드의-마지막-내용으로-되돌리기)
* [Revert: 새로운 커밋을 생성하면서 커밋 되돌리기](#revert-새로운-커밋을-생성하면서-커밋-되돌리기)
* [Reset: 커밋 제거 (프라이빗 브랜치에서만 사용하길 권고)](#reset-커밋-제거-프라이빗-브랜치에서만-사용하길-권고)
* [이전 커밋 메시지 변경](#이전-커밋-메시지-변경)
* [브랜치의 커밋중 업스트림에 머지되지 않은 커밋 히스토리 보기](#브랜치의-커밋중-업스트림에-머지되지-않은-커밋-히스토리-보기)
* [Author 수정하기](#author-수정하기)
* [글로벌 설정에서 변경된 author로 author 재설정하기](#글로벌-설정에서-변경된-author로-author-재설정하기)
* [원격지 URL 변경하기](#원격지-url-변경하기)
* [모든 원격지 레퍼런스 리스트 나열하기](#모든-원격지-레퍼런스-리스트-나열하기)
* [모든 로컬 및 원격지 브랜치 나열하기](#모든-로컬-및-원격지-브랜치-나열하기)
* [원격지 브랜치만 나열하기](#원격지-브랜치만-나열하기)
* [파일 변경사항의 전체가 아닌 일부만 스테이징하기](#파일-변경사항의-전체가-아닌-일부만-스테이징하기)
* [git 배시 자동완성 사용하기](#git-배시-자동완성-사용하기)
* [2주 전부터 현재까지의 변경사항 보기](#2주-전부터-현재까지의-변경사항-보기)
* [마스터로부터 포크한 이후에 생성된 모든 커밋 보기](#마스터로부터-포크한-이후에-생성된-모든-커밋-보기)
* [cherry-pick을 사용해 브랜치간 커밋 가져오기](#cherry-pick을-사용해-브랜치간-커밋-가져오기)
* [해당 커밋 해시를 가지고 있는 브랜치들 검색하기](#해당-커밋-해시를-가지고-있는-브랜치들-검색하기)
* [Git 명령어 별칭 지정](#git-명령어-별칭-지정)
* [커밋하지 않은 트래킹된 파일들의 상태 저장하기](#커밋하지-않은-트래킹된-파일들의-상태-저장하기)
* [스테이징되지 않은 변경사항들의 현재 상태를 트래킹된 파일로 저장하기](#스테이징되지-않은-변경사항들의-현재-상태를-트래킹된-파일로-저장하기)
* [트래킹되지 않은 파일들까지 모두 포함해 현재 상태 저장하기](#트래킹되지-않은-파일들까지-모두-포함해-현재-상태-저장하기)
* [현재 상태를 메시지와 함께 저장하기](#현재-상태를-메시지와-함께-저장하기)
* [모든 무시된 파일, 트래킹되지 않은 파일, 트래킹된 파일들의 현재 상태 저장하기](#모든-무시된-파일-트래킹되지-않은-파일-트래킹된-파일들의-현재-상태-저장하기)
* [저장된 모든 스태시 리스트 나열하기](#저장된-모든-스태시-리스트-나열하기)
* [스태시 리스트에서 삭제하지 않고 스태시 적용하기](#스태시-리스트에서-삭제하지-않고-스태시-적용하기)
* [마지막으로 저장된 스태시 상태를 적용하고 스태시 리스트에서 삭제하기](#마지막으로-저장된-스태시-상태를-적용하고-스태시-리스트에서-삭제하기)
* [저장된 모든 스태시 삭제하기](#저장된-모든-스태시-삭제하기)
* [스태시로부터 단일 파일 가져오기](#스태시로부터-단일-파일-가져오기)
* [트래킹된 파일들 모두 보기](#트래킹된-파일들-모두-보기)
* [트래킹되지 않은 모든 파일 보기](#트래킹되지-않은-파일들-모두-보기)
* [무시된 파일들 모두 보기](#무시된-파일들-모두-보기)
* [저장소에 새로운 워킹 트리 생성하기 (git 2.5)](#저장소에-새로운-워킹-트리-생성하기-git-25)
* [HEAD로부터 새로운 워킹 트리 생성하기](#head로부터-새로운-워킹-트리-생성하기)
* [파일을 삭제하지 않고 언트래킹하기](#파일을-삭제하지-않고-언트래킹하기)
* [트래킹되지 않은 파일/디렉토리를 실제로 삭제하기 전에 어떤 파일/디렉토리가 삭제되는지 테스트 해보기](#트래킹되지-않은-파일디렉토리를-실제로-삭제하기-전에-어떤-파일디렉토리가-삭제되는지-테스트-해보기)
* [트래킹되지 않은 파일들 강제로 삭제하기](#트래킹되지-않은-파일들-강제로-삭제하기)
* [트래킹되지 않은 디렉토리 강제로 삭제하기](#트래킹되지-않은-디렉토리-강제로-삭제하기)
* [모든 서브 모듈 업데이트하기](#모든-서브-모듈-업데이트하기)
* [현재 브랜치에서 아직 마스터에 머지되지 않은 모든 커밋들 보기](#현재-브랜치에서-아직-마스터에-머지되지-않은-모든-커밋들-보기)
* [브랜치명 수정하기](#브랜치명-수정하기)
* ['feature' 브랜치를 마스터에 리베이스한 후 마스터에 머지하기](#feature-브랜치를-마스터에-리베이스한-후-마스터에-머지하기)
* [마스터 브랜치 아카이브](#마스터-브랜치-아카이브)
* [커밋 메시지는 변경하지 않고 이전 커밋 변경하기](#커밋시-파일-무시하기-예를-들어-changelog-파일)
* [원격지에서 삭제된 원격 브랜치 레퍼런스 제거하기](#원격지에서-삭제된-원격-브랜치-레퍼런스-제거하기)
* [첫 리비전의 커밋 해시값 가져오기](#첫-리비전의-커밋-해시값-가져오기)
* [버전 트리 시각화](#버전-트리-시각화)
* [트래킹된 하위폴더를 gh-pages 브랜치로 배포하기](#트래킹된-하위폴더를-gh-pages-브랜치로-배포하기)
* [subtree를 사용해 저장소에 프로젝트 추가하기](#subtree를-사용해-저장소에-프로젝트-추가하기)
* [subtree를 사용해 관련된 프로젝트의 최신 변경사항을 저장소로 가져오기](#subtree를-사용해-관련된-프로젝트의-최신-변경사항을-저장소로-가져오기)
* [브랜치를 히스토리와 함께 파일로 추출하기](#브랜치를-히스토리와-함께-파일로-추출하기)
* [번들 가져오기](#번들-가져오기)
* [현재 브랜치명 가져오기](#현재-브랜치명-가져오기)
* [커밋시 파일 무시하기 (예를 들어, Changelog 파일)](#커밋시-파일-무시하기-예를-들어-Changelog-파일)
* [리베이스 전에 변경사항 스태시하기](#리베이스-전에-변경사항-스태시하기)
* [ID로 풀 리퀘스트를 로컬 저장소로 가져오기](#id로-풀-리퀘스트를-로컬-저장소로-가져오기)
* [현재 브랜치의 가장 최근 태그 보기](#현재-브랜치의-가장-최근-태그-보기)
* [diff 워드 단위로 보기](#diff-워드-단위로-보기)
* [diff 도구를 사용해 변경사항 보기](#diff-도구를-사용해-변경사항-보기)
* [트래킹된 파일의 변경사항 무시하기](#트래킹된-파일의-변경사항-무시하기)
* [assume-unchanged 되돌리기](#assume-unchanged-되돌리기)
* [`.gitignore`에 명시된 파일들 삭제하기](#gitignore에-명시된-파일들-삭제하기)
* [삭제된 파일 복구하기](#삭제된-파일-복구하기)
* [특정 커밋으로의 파일로 복구하기](#특정-커밋으로의-파일로-복구하기)
* [pull시 머지하는 대신 항상 리베이스 하기](#pull시-머지하는-대신-항상-리베이스-하기)
* [모든 별칭과 설정값들 나열하기](#모든-별칭과-설정값들-나열하기)
* [대소문자 구별 활성화](#대소문자-구별-활성화)
* [커스텀 에디터 추가하기](#커스텀-에디터-추가하기)
* [오타 자동 수정 활성화](#오타-자동-수정-활성화)
* [변경사항이 어떤 릴리즈에 속하는지 확인하기](#변경사항이-어떤-릴리즈에-속하는지-확인하기)
* [명령어 테스트 해보기 (dry-run 플래그를 지원하는 모든 명령어에서 가능)](#명령어-테스트-해보기-dry-run-플래그를-지원하는-모든-명령어에서-가능)
* [커밋이 이전 커밋의 수정 버전임을 표시하기](#커밋이-이전-커밋의-수정-버전임을-표시하기)
* [fixup 커밋을 일반 커밋으로 스쿼시하기](#fixup-커밋을-일반-커밋으로-스쿼시하기)
* [커밋시 스테이징된 파일들 스킵하기](#커밋시-스테이징된-파일들-스킵하기)
* [대화형으로 스테이징하기](#대화형으로-스테이징하기)
* [무시된 파일들 나열하기](#무시된-파일들-나열하기)
* [무시된 파일들 상태 출력](#무시된-파일들-상태-출력)
* [Branch2에는 없고 Branch1에만 있는 커밋들 나열하기](#branch2에는-없고-branch1에만-있는-커밋들-나열하기)
* [마지막 n개의 커밋 나열하기](#마지막-n개의-커밋-나열하기)
* [이전에 충돌을 해결했던 방법을 기록하고 재사용하기](#이전에-충돌을-해결했던-방법을-기록하고-재사용하기)
* [모든 충돌된 파일들 에디터로 열기](#모든-충돌된-파일들-에디터로-열기)
* [unpacked 오브젝트의 갯수와 디스크 사용량 보기](#unpacked-오브젝트의-갯수와-디스크-사용량-보기)
* [오브젝트 데이터베이스에서 도달할 수 없는 오브젝트들 제거하기](#오브젝트-데이터베이스에서-도달할-수-없는-오브젝트들-제거하기)
* [gitweb으로 워킹 디렉토리 탐색하기](#gitweb으로-워킹-디렉토리-탐색하기)
* [커밋 로그에서 GPG 시그니쳐 보기](#커밋-로그에서-gpg-시그니쳐-보기)
* [글로벌 설정에서 엔트리 제거하기](#글로벌-설정에서-엔트리-제거하기)
* [히스토리가 없는 새로운 브랜치로 체크아웃하기](#히스토리가-없는-새로운-브랜치로-체크아웃하기)
* [다른 브랜치에서 파일내용 가져오기](#다른-브랜치에서-파일내용-가져오기)
* [루트 커밋과 머지 커밋만 나열하기](#루트-커밋과-머지-커밋만-나열하기)
* [대화형 리베이스로 이전 두 커밋 수정하기](#대화형-리베이스로-이전-두-커밋-수정하기)
* [작업중인 브랜치들 모두 나열하기](#작업중인-브랜치들-모두-나열하기)
* [이진 탐색으로 좋은/안좋은 커밋 검색하기](#이진-탐색으로-좋은안좋은-커밋-검색하기)
* [pre-commit과 commit-msg 깃 후킹 우회하기](#pre-commit과-commit-msg-깃-후킹-우회하기)
* [특정 파일에 대한 커밋과 변경사항 나열하기 (이름이 바뀐 파일도 추적)](#특정-파일에-대한-커밋과-변경사항-나열하기-이름이-바뀐-파일도-추적)
* [단일 브랜치 클론](#단일-브랜치-클론)
* [새로운 브랜치 생성과 동시에 스위칭](#새로운-브랜치-생성과-동시에-스위칭)
* [커밋시 파일 모드 변경 무시](#커밋시-파일-모드-변경-무시)
* [Git 터미널 색상 출력 비활성화](#git-터미널-색상-출력-비활성화)
* [특정 명령어에 대한 색상 설정 지정하기](#특정-명령어에-대한-색상-설정-지정하기)
* [모든 로컬 브랜치를 최근 커밋 날짜를 기준으로 정렬해 나열하기](#모든-로컬-브랜치를-최근-커밋-날짜를-기준으로-정렬해-나열하기)
* [트래킹된 파일에서 패턴(정규식이나 문자열)에 매칭되는 라인 검색](#트래킹된-파일에서-패턴정규식이나-문자열에-매칭되는-라인-검색)
* [저장소의 얕은 카피 버전 클론하기](#저장소의-얕은-카피-버전-클론하기)
* [모든 브랜치에서 주어진 텍스트로 커밋 로그 검색하기](#모든-브랜치에서-주어진-텍스트로-커밋-로그-검색하기)
* [브랜치의 첫 커밋 가져오기 (마스터 브랜치로부터 시작된)](#브랜치의-첫-커밋-가져오기-마스터-브랜치로부터-시작된)
* [스테이징된 파일들 언스테이징하기](#스테이징된-파일들-언스테이징하기)
* [원격 저장소에 강제 푸시하기](#원격-저장소에-강제-푸시하기)
* [저장소명 추가하기](#저장소명-추가하기)
* [주어진 파일의 각 라인별 author, 시간 그리고 최종 리비전명 보기](#주어진-파일의-각-라인별-author-시간-그리고-최종-리비전명-보기)
* [Author와 제목으로 커밋 그룹핑하기](#author와-제목으로-커밋-그룹핑하기)
* [다른 사람이 작업한 내용을 덮어쓰지 않고 강제 푸시하기](#다른-사람이-작업한-내용을-덮어쓰지-않고-강제-푸시하기)
* [특정 author가 기여한 라인수 보기](#특정-author가-기여한-라인수-보기)
* [Revert: 머지 복구하기](#revert-머지-복구하기)
* [특정 브랜치의 커밋 수 출력하기](#특정-브랜치의-커밋-수-출력하기)
* [별칭: git undo](#별칭-git-undo)
* [오브젝트에 노트(메모) 추가하기](#오브젝트에-노트메모-추가하기)
* [모든 깃 노트 보기](#모든-깃-노트-보기)
* [다른 저장소에 있는 커밋 적용하기](#다른-저장소에-있는-커밋-적용하기)
* [페치 레퍼런스 지정하기](#페치-레퍼런스-지정하기)
* [두 브랜치의 공통 조상 커밋 찾기](#두-브랜치의-공통-조상-커밋-찾기)
* [푸시되지 않은 커밋들 나열하기](#푸시되지-않은-커밋들-나열하기)
* [공백 변경사항을 제외한 모든 변경사항 추가하기](#공백-변경사항을-제외한-모든-변경사항-추가하기)
* [깃 설정 [로컬/글로벌] 수정하기](#깃-설정-로컬글로벌-수정하기)
* [특정 구간에서 blame 정보 보기](#특정-구간에서-blame-정보-보기)
* [Git의 논리적 변수 보기](#git의-논리적-변수-보기)
* [패치 파일 미리 포맷팅하기](#패치-파일-미리-포맷팅하기)
* [저장소명 가져오기](#저장소명-가져오기)
* [특정 날짜 구간 사이의 커밋 로그 출력하기](#특정-날짜-구간-사이의-커밋-로그-출력하기)
* [로그에서 author 제외하기](#로그에서-author-제외하기)
* [브랜치의 수정사항 요약하기](#브랜치의-수정사항-요약하기)
* [원격 저장소의 모든 레퍼런스 나열하기](#원격-저장소의-모든-레퍼런스-나열하기)
* [트래킹되지 않은 파일들 백업하기](#트래킹되지-않은-파일들-백업하기)
* [모든 git 명령어 별칭 나열하기](#모든-git-명령어-별칭-나열하기)
* [git 상태 간략하게 보기](#git-상태-간략하게-보기)
* [하루 전의 커밋으로 체크아웃하기](#하루-전의-커밋으로-체크아웃하기)
* [새로운 로컬 브랜치를 원격 저장소에 푸시하고 트래킹하기](#새로운-로컬-브랜치를-원격-저장소에-푸시하고-트래킹하기)
* [브랜치 베이스 변경하기](#브랜치-베이스-변경하기)
* [원격 저장소에 HTTPs 대신 SSH 사용하기](#원격-저장소에-HTTPs-대신-SSH-사용하기)
* [최신 커밋에 서브모듈 업데이트하기](#최신-커밋에-서브모듈-업데이트하기)
* [LF에서 CRLF로의 자동 변환 막기](#LF에서-CRLF로의-자동-변환-막기)

## 20개 내외의 명령어로 Git 사용하기
```sh
git help everyday
```

## Git과 함께 제공되는 유용한 가이드라인 보기
```sh
git help -g
```

## 내용으로 변경사항 검색
```sh
git log -S''
```

## 원격지 동기화 및 로컬 변경사항 덮어쓰기
```sh
git fetch origin && git reset --hard origin/master && git clean -f -d
```

## 특정 커밋까지의 모든 파일 나열하기
```sh
git ls-tree --name-only -r
```

## 첫 번째 커밋 초기화
```sh
git update-ref -d HEAD
```

## 충돌된 모든 파일 나열하기
```sh
git diff --name-only --diff-filter=U
```

## 특정 커밋에서 변경된 모든 파일 나열하기
```sh
git diff-tree --no-commit-id --name-only -r
```

## 마지막 커밋 이후로 스테이징되지 않은 변경사항 보기
```sh
git diff
```

## 커밋을 하기 위해 스테이징된 변경사항 보기
```sh
git diff --cached
```

__다른 방법:__
```sh
git diff --staged
```

## 스테이징된 변경사항과 스테이징되지 않은 변경사항 모두 보기
```sh
git diff HEAD
```

## 이미 마스터 브랜치에 머지된 모든 브랜치 나열하기
```sh
git branch --merged master
```

## 이전 브랜치로 전환하기
```sh
git checkout -
```

__다른 방법:__
```sh
git checkout @{-1}
```

## 이미 마스터 브랜치에 머지된 모든 브랜치들 삭제하기
```sh
git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d
```

__다른 방법:__
```sh
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out
```

## 모든 브랜치들 및 그 브랜치들의 업스트림과 마지막 커밋 나열하기
```sh
git branch -vv
```

## 업스트림 브랜치 설정 (트래킹)
```sh
git branch -u origin/mybranch
```

## 로컬 브랜치 삭제
```sh
git branch -d
```

## 원격 브랜치 삭제
```sh
git push origin --delete
```

__다른 방법:__
```sh
git push origin :
```

## 로컬 태그 삭제
```sh
git tag -d
```

## 원격 태그 삭제
```sh
git push origin :refs/tags/
```

## 로컬 변경사항을 헤드의 마지막 내용으로 되돌리기
```sh
git checkout --
```

## Revert: 새로운 커밋을 생성하면서 커밋 되돌리기
```sh
git revert
```

## Reset: 커밋 제거 (프라이빗 브랜치에서만 사용하길 권고)
```sh
git reset
```

## 이전 커밋 메시지 변경
```sh
git commit -v --amend
```

## 브랜치의 커밋중 업스트림에 머지되지 않은 커밋 히스토리 보기
```sh
git cherry -v master
```

## Author 수정하기
```sh
git commit --amend --author='Author Name '
```

## 글로벌 설정에서 변경된 author로 author 재설정하기
```sh
git commit --amend --reset-author --no-edit
```

## 원격지 URL 변경하기
```sh
git remote set-url origin
```

## 모든 원격지 레퍼런스 리스트 나열하기
```sh
git remote
```

__다른 방법:__
```sh
git remote show
```

## 모든 로컬 및 원격지 브랜치 나열하기
```sh
git branch -a
```

## 원격지 브랜치만 나열하기
```sh
git branch -r
```

## 파일 변경사항의 전체가 아닌 일부만 스테이징하기
```sh
git add -p
```

## Git 배시 자동완성 사용하기
```sh
curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc
```

## 2주 전부터 현재까지의 변경사항 보기
```sh
git log --no-merges --raw --since='2 weeks ago'
```

__다른 방법:__
```sh
git whatchanged --since='2 weeks ago'
```

## 마스터로부터 포크한 이후에 생성된 모든 커밋 보기
```sh
git log --no-merges --stat --reverse master..
```

## cherry-pick을 사용해 브랜치간 커밋 가져오기
```sh
git checkout && git cherry-pick
```

## 해당 커밋 해시를 가지고 있는 브랜치들 검색하기
```sh
git branch -a --contains
```

__다른 방법:__
```sh
git branch --contains
```

## Git 명령어 별칭 지정
```sh
git config --global alias.
git config --global alias.st status
```

## 커밋하지 않은 트래킹된 파일들의 상태 저장하기
```sh
git stash
```

__다른 방법:__
```sh
git stash save
```

## 스테이징되지 않은 변경사항들의 현재 상태를 트래킹된 파일로 저장하기
```sh
git stash -k
```

__다른 방법:__
```sh
git stash --keep-index
```

```sh
git stash save --keep-index
```

## 트래킹되지 않은 파일들까지 모두 포함해 현재 상태 저장하기
```sh
git stash -u
```

__다른 방법:__
```sh
git stash save -u
```

```sh
git stash save --include-untracked
```

## 현재 상태를 메시지와 함께 저장하기
```sh
git stash save
```

## 모든 무시된 파일, 트래킹되지 않은 파일, 트래킹된 파일들의 현재 상태 저장하기
```sh
git stash -a
```

__다른 방법:__
```sh
git stash --all
```

```sh
git stash save --all
```

## 저장된 모든 스태시 리스트 나열하기
```sh
git stash list
```

## 스태시 리스트에서 삭제하지 않고 스태시 적용하기
```sh
git stash apply
```

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

__다른 방법:__
```sh
git stash apply stash@{0} && git stash drop stash@{0}
```

## 저장된 모든 스태시 삭제하기
```sh
git stash clear
```

__다른 방법:__
```sh
git stash drop
```

## 스태시로부터 단일 파일 가져오기
```sh
git checkout --
```

__다른 방법:__
```sh
git checkout stash@{0} --
```

## 트래킹된 파일들 모두 보기
```sh
git ls-files -t
```

## 트래킹되지 않은 파일들 모두 보기
```sh
git ls-files --others
```

## 무시된 파일들 모두 보기
```sh
git ls-files --others -i --exclude-standard
```

## 저장소에 새로운 워킹 트리 생성하기 (git 2.5)
```sh
git worktree add -b
```

## HEAD로부터 새로운 워킹 트리 생성하기
```sh
git worktree add --detach HEAD
```

## 파일을 삭제하지 않고 언트래킹하기
```sh
git rm --cached
```

__다른 방법:__
```sh
git rm --cached -r
```

## 트래킹되지 않은 파일/디렉토리를 실제로 삭제하기 전에 어떤 파일/디렉토리가 삭제되는지 테스트 해보기
```sh
git clean -n
```

## 트래킹되지 않은 파일들 강제로 삭제하기
```sh
git clean -f
```

## 트래킹되지 않은 디렉토리 강제로 삭제하기
```sh
git clean -f -d
```

__다른 방법:__
```sh
git clean -df
```

## 모든 서브 모듈 업데이트하기
```sh
git submodule foreach git pull
```

__다른 방법:__
```sh
git submodule update --init --recursive
```

```sh
git submodule update --remote
```

## 현재 브랜치에서 아직 마스터에 머지되지 않은 모든 커밋들 보기
```sh
git cherry -v master
```

__다른 방법:__
```sh
git cherry -v master
```

## 브랜치명 수정하기
```sh
git branch -m
```

__다른 방법:__
```sh
git branch -m []
```

## 'feature' 브랜치를 마스터에 리베이스한 후 마스터에 머지하기
```sh
git rebase master feature && git checkout master && git merge -
```

## 마스터 브랜치 아카이브
```sh
git archive master --format=zip --output=master.zip
```

## 커밋 메시지는 변경하지 않고 이전 커밋 변경하기
```sh
git add --all && git commit --amend --no-edit
```

## 원격지에서 삭제된 원격 브랜치 레퍼런스 제거하기
```sh
git fetch -p
```

__다른 방법:__
```sh
git remote prune origin
```

## 첫 리비전의 커밋 해시값 가져오기
```sh
git rev-list --reverse HEAD | head -1
```

__다른 방법:__
```sh
git rev-list --max-parents=0 HEAD
```

```sh
git log --pretty=oneline | tail -1 | cut -c 1-40
```

```sh
git log --pretty=oneline --reverse | head -1 | cut -c 1-40
```

## 버전 트리 시각화
```sh
git log --pretty=oneline --graph --decorate --all
```

__다른 방법:__
```sh
gitk --all
```

## 트래킹된 하위폴더를 gh-pages 브랜치로 배포하기
```sh
git subtree push --prefix subfolder_name origin gh-pages
```

## subtree를 사용해 저장소에 프로젝트 추가하기
```sh
git subtree add --prefix=/ --squash
[email protected]:/.git master
```

## subtree를 사용해 관련된 프로젝트의 최신 변경사항을 저장소로 가져오기
```sh
git subtree pull --prefix=/ --squash [email protected]:/.git master
```

## 브랜치를 히스토리와 함께 파일로 추출하기
```sh
git bundle create
```

## 번들 가져오기
```sh
git clone repo.bundle -b
```

## 현재 브랜치명 가져오기
```sh
git rev-parse --abbrev-ref HEAD
```

## 커밋시 파일 무시하기 (예를 들어, Changelog 파일)
```sh
git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog
```

## 리베이스 전에 변경사항 스태시하기
```sh
git rebase --autostash
```

## ID로 풀 리퀘스트를 로컬 저장소로 가져오기
```sh
git fetch origin pull//head:
```

__다른 방법:__
```sh
git pull origin pull//head:
```

## 현재 브랜치의 가장 최근 태그 보기
```sh
git describe --tags --abbrev=0
```

## diff 워드 단위로 보기
```sh
git diff --word-diff
```

## diff 도구를 사용해 변경사항 보기
```sh
git difftool -t
```

## 트래킹된 파일의 변경사항 무시하기
```sh
git update-index --assume-unchanged
```

## assume-unchanged 되돌리기
```sh
git update-index --no-assume-unchanged
```

## `.gitignore`에 명시된 파일들 삭제하기
```sh
git clean -X -f
```

## 삭제된 파일 복구하기
```sh
git checkout ^ --
```

## 특정 커밋으로의 파일로 복구하기
```sh
git checkout --
```

## pull시 머지하는 대신 항상 리베이스 하기
```sh
git config --global pull.rebase true
```

__다른 방법:__
```sh
#git < 1.7.9
git config --global branch.autosetuprebase always
```

## 모든 별칭과 설정값들 나열하기
```sh
git config --list
```

## 대소문자 구별 활성화
```sh
git config --global core.ignorecase false
```

## 커스텀 에디터 추가하기
```sh
git config --global core.editor '$EDITOR'
```

## 오타 자동 수정 활성화
```sh
git config --global help.autocorrect 1
```

## 변경사항이 어떤 릴리즈에 속하는지 확인하기
```sh
git name-rev --name-only
```

## 명령어 테스트 해보기 (dry-run 플래그를 지원하는 모든 명령어에서 가능)
```sh
git clean -fd --dry-run
```

## 커밋이 이전 커밋의 수정 버전임을 표시하기
```sh
git commit --fixup
```

## fixup 커밋을 일반 커밋으로 스쿼시하기
```sh
git rebase -i --autosquash
```

## 커밋시 스테이징된 파일들 스킵하기
```sh
git commit --only
```

## 대화형으로 스테이징하기
```sh
git add -i
```

## 무시된 파일들 나열하기
```sh
git check-ignore *
```

## 무시된 파일들 상태 출력
```sh
git status --ignored
```

## Branch2에는 없고 Branch1에만 있는 커밋들 나열하기
```sh
git log Branch1 ^Branch2
```

## 마지막 n개의 커밋 나열하기
```sh
git log -
```

__다른 방법:__
```sh
git log -n
```

## 이전에 충돌을 해결했던 방법을 기록하고 재사용하기
```sh
git config --global rerere.enabled 1
```

## 모든 충돌된 파일들 에디터로 열기
```sh
git diff --name-only | uniq | xargs $EDITOR
```

## unpacked 오브젝트의 갯수와 디스크 사용량 보기
```sh
git count-objects --human-readable
```

## 오브젝트 데이터베이스에서 도달할 수 없는 오브젝트들 제거하기
```sh
git gc --prune=now --aggressive
```

## gitweb으로 워킹 디렉토리 탐색하기
```sh
git instaweb [--local] [--httpd=] [--port=] [--browser=]
```

## 커밋 로그에서 GPG 시그니쳐 보기
```sh
git log --show-signature
```

## 글로벌 설정에서 엔트리 제거하기
```sh
git config --global --unset
```

## 히스토리가 없는 새로운 브랜치로 체크아웃하기
```sh
git checkout --orphan
```

## 다른 브랜치에서 파일내용 가져오기
```sh
git show :
```

## 루트 커밋과 머지 커밋만 나열하기
```sh
git log --first-parent
```

## 대화형 리베이스로 이전 두 커밋 수정하기
```sh
git rebase --interactive HEAD~2
```

## 작업중인 브랜치들 모두 나열하기
```sh
git checkout master && git branch --no-merged
```

## 이진 탐색으로 좋은/안좋은 커밋 검색하기
```sh
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 깃 후킹 우회하기
```sh
git commit --no-verify
```

## 특정 파일에 대한 커밋과 변경사항 나열하기 (이름이 바뀐 파일도 추적)
```sh
git log --follow -p --
```

## 단일 브랜치 클론
```sh
git clone -b --single-branch https://github.com/user/repo.git
```

## 새로운 브랜치 생성과 동시에 스위칭
```sh
git checkout -b
```

__다른 방법:__
```sh
git branch && git checkout
```

## 커밋시 파일 모드 변경 무시
```sh
git config core.fileMode false
```

## Git 터미널 색상 출력 비활성화
```sh
git config --global color.ui false
```

## 특정 명령어에 대한 색상 설정 지정하기
```sh
git config --global
```

## 모든 로컬 브랜치를 최근 커밋 날짜를 기준으로 정렬해 나열하기
```sh
git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
```

## 트래킹된 파일에서 패턴(정규식이나 문자열)에 매칭되는 라인 검색
```sh
git grep --heading --line-number 'foo bar'
```

## 저장소의 얕은 카피 버전 클론하기
```sh
git clone https://github.com/user/repo.git --depth 1
```

## 모든 브랜치에서 주어진 텍스트로 커밋 로그 검색하기
```sh
git log --all --grep=''
```

## 브랜치의 첫 커밋 가져오기 (마스터 브랜치로부터 시작된)
```sh
git log master.. --oneline | tail -1
```

## 스테이징된 파일들 언스테이징하기
```sh
git reset HEAD
```

## 원격 저장소에 강제 푸시하기
```sh
git push -f
```

## 저장소명 추가하기
```sh
git remote add
```

## 주어진 파일의 각 라인별 author, 시간 그리고 최종 리비전명 보기
```sh
git blame
```

## Author와 제목으로 커밋 그룹핑하기
```sh
git shortlog
```

## 다른 사람이 작업한 내용을 덮어쓰지 않고 강제 푸시하기
```sh
git push --force-with-lease
```

## 특정 author가 기여한 라인수 보기
```sh
git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += ; subs += ; loc += - } END { printf "added lines: %s removed lines: %s total lines: %s
", add, subs, loc }' -
```

__다른 방법:__
```sh
git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += ; subs += ; loc += - } END { printf "added lines: %s, removed lines: %s, total lines: %s
", add, subs, loc }' - # on Mac OSX
```

## Revert: 머지 복구하기
```sh
git revert -m 1
```

## 특정 브랜치의 커밋 수 출력하기
```sh
git rev-list --count
```

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

## 오브젝트에 노트(메모) 추가하기
```sh
git notes add -m 'Note on the previous commit....'
```

## 모든 깃 노트 보기
```sh
git log --show-notes='*'
```

## 다른 저장소에 있는 커밋 적용하기
```sh
git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k
```

## 페치 레퍼런스 지정하기
```sh
git fetch origin master:refs/remotes/origin/mymaster
```

## 두 브랜치의 공통 조상 커밋 찾기
```sh
diff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1
```

## 푸시되지 않은 커밋들 나열하기
```sh
git log --branches --not --remotes
```

__다른 방법:__
```sh
git log @{u}..
```

```sh
git cherry -v
```

## 공백 변경사항을 제외한 모든 변경사항 추가하기
```sh
git diff --ignore-all-space | git apply --cached
```

## 깃 설정 [로컬/글로벌] 수정하기
```sh
git config [--global] --edit
```

## 특정 구간에서 blame 정보 보기
```sh
git blame -L ,
```

## Git의 논리적 변수 보기
```sh
git var -l |
```

## 패치 파일 미리 포맷팅하기
```sh
git format-patch -M upstream..topic
```

## 저장소명 가져오기
```sh
git rev-parse --show-toplevel
```

## 특정 날짜 구간 사이의 커밋 로그 출력하기
```sh
git log --since='FEB 1 2017' --until='FEB 14 2017'
```

## 로그에서 author 제외하기
```sh
git log --perl-regexp --author='^((?!excluded-author-regex).*)

```

## 브랜치의 수정사항 요약하기
```sh
git request-pull v1.0 https://git.ko.xz/project master:for-linus
```

## 원격 저장소의 모든 레퍼런스 나열하기
```sh
git ls-remote git://git.kernel.org/pub/scm/git/git.git
```

## 트래킹되지 않은 파일들 백업하기
```sh
git ls-files --others -i --exclude-standard | xargs zip untracked.zip
```

## 모든 git 명령어 별칭 나열하기
```sh
git config -l | grep alias | sed 's/^alias\.//g'
```

__다른 방법:__
```sh
git config -l | grep alias | cut -d '.' -f 2
```

## git 상태 간략하게 보기
```sh
git status --short --branch
```

## 하루 전의 커밋으로 체크아웃하기
```sh
git checkout master@{yesterday}
```

## 새로운 로컬 브랜치를 원격 저장소에 푸시하고 트래킹하기
```sh
git push -u origin
```

## 브랜치 베이스 변경하기
```sh
git rebase --onto
```

## 원격 저장소에 HTTPs 대신 SSH 사용하기
```sh
git config --global url.'[email protected]:'.insteadOf 'https://github.com/'
```

## 최신 커밋에 서브모듈 업데이트하기
```sh
cd
git pull origin
cd
git add
git commit -m "submodule updated"
```

## LF에서 CRLF로의 자동 변환 막기
```sh
git config --global core.autocrlf false
```