Git:Example
Git 주요 명령어 및 사용방법에 대하여 정리한다.
Config
-
git config --global --list
- 현재 설정정보 조회할 수 있습니다. --global옵션은 전역설정에 대한 옵션이며 현재 프로젝트에만 적용할때는 주지 않습니다.
-
git config --global user.name "사용자명"
- 사용자명을 등록합니다. (필수)
-
git config --global user.email "이메일주소"
- 이메일 주소를 등록합니다. (필수)
-
git config --global color.ui auto
- 터미널에 표시되는 메시지에 칼라를 표시해줌.
-
git -c user.name=사용자명 -c user.email=이메일주소 ...
- 임시로 사용자명 이메일 주소 변경.
Branch
-
git branch
- 현재 존재하는 브랜치를 조회합니다. -r 옵션을 사용하면 원격저장소의 브랜치를 확인할 수 있습니다.
-
git branch 브랜치명B 브랜치명A
- 브랜치명A에서 새로운 브랜치 브랜치명B를 만듭니다. (git에서 기본 브랜치는 master라는 이름을 사용합니다.)
-
git branch 브랜치명
- 브랜치명의 새로운 브랜치를 만듭니다.(체크아웃은 하지 않습니다.)
-
git branch -d 브랜치명
- 브랜치를 삭제합니다.
-
git branch -m 존재하는브랜치명 새로운브랜치명
- 존재하는 브랜치를 새로운브랜치로 변경합니다. 이미 존재하는 브랜치명이 있을 경우에는 에러가 나는데 -M 옵션을 사용하면 이미 있는 브랜치의 경우에도 덮어씁니다.
-
git tag 태그명 브랜치명
- 브랜치명의 현재시점에 태그명으로 된 태그를 붙힙니다. git tag만 입력하면 현재 존재하는 태그 목록을 볼 수 있습니다.
-
git checkout 브랜치명/태그명
- 해당 브랜치나 태그로 작업트리를 변경합니다.
-
git checkout -b 브랜치명B 브랜치명A
- 브랜치명A에서 브랜치명B라는 새로운 브랜치를 만들면서 체크아웃을 합니다.
-
git rebase 브랜치명
- 브랜치명의 변경사항을 현재 브랜치에 적용합니다.
-
git merge 브랜치명
- 브랜치명의 브랜치를 현재 브랜치로 합칩니다. --squash 옵션을 주면 브랜치명의 모든 커밋을 하나의 커밋으로 만듭니다.
-
git cherry-pick 커밋명
- 커밋명의 특정 커밋만을 선택해서 현재 브랜치에 커밋으로 만듭니다. -n 옵션을 주면 작업트리에 합치지만 커밋은 하지 않기 때문에 여러개의 커밋을 합쳐서 커밋할 수 있습니다.
Log
-
git log
- 커밋로그들을 볼 수 있으면 -1나 -2같은 옵션을 주어 출력할 커밋로그의 갯수를 지정할 수 있습니다. --pretty=oneline 옵션을 주면 한줄로 간단히 보여주고 --pretty=format:"%h %s"처럼 형식을 정해줄 수 있습니다. -p 옵션을 사용하면 변경된 내용을 같이 보여줍니다. --since="5 hours"이나 --before="5 hours"같은 옵션도 사용가능합니다. --graph옵션을 주면 브랜치 트리를 볼 수 있습니다.
-
git log 커밋명
:해당 커밋명의 로그를 볼 수 있습니다. 커밋명A..커밋명B(마침표2개)와 같이 입력하면 커밋명A이후부터 커밋명B까지의 로그를 볼 수 있습니다. ^은 -1과 동일해서 HEAD^라고 하면 최신바로 이전 커밋이고 HEAD^^^와 같이 쓸 수 있으며 HEAD~3을 하면 HEAD의 3개 이전의 커밋을 뜻합니다.
-
git blame 파일명
- 갈 줄 앞에 커밋명과 커밋한 사람등의 정보를 볼 수 있습니다.
-
git blame -L 10,15 파일명
- -L 옵션을 사용하면 10줄부터 15줄로 범위를 지정해서 볼수 있고 15대신 +5와 같이 사용할 수 있습니다. 숫자의 범위 대신 정규식도 사용이 가능합니다.
-
git blame -M 파일명
- -M 옵션을 사용하면 반복되는 패턴을 찾아서 복사하거나 이동된 내용을 찾아줍니다. -C -C 옵션을 사용하면 파일간의 복사한 경우를 찾아줍니다. -C -C는 git log에서도 사용가능하며 내용의 복사를 찾을때는 git log에서 -p옵션을 사용합니다.
Reset/Revert
-
git revert 커밋명
- 기존의 커밋에서 변경한 내용을 취소해서 새로운 커밋을 만듭니다. -n옵션을 사용하면 바로 커밋하지 않기 때문에 revert를 여러번한 다음에 커밋할 수 있습니다.(항상 최신의 커밋부터 revert해야 합니다.)
-
git reset 커밋명
- 이전 커밋을 수정하기 위해서 사용합니다. --soft옵션을 사용하면 이전 커밋을 스테이징하고 커밋은 하지 않으며 --hard옵션은 저장소와 작업트리에서 커밋을 제거합니다. git reset HEAD^와 같이 입력하면 최근 1개의 커밋을 취소할 수 있습니다.
-
git rebase -i 커밋범위
- -i옵션으로 대화형모드로 커밋 순서를 변경하거나 합치는 등의 작업을 할 수 있습니다.
-
git reset --hard HEAD
- 워킹트리 전체를 마지막 커밋 상태로 되돌림. 마지막 커밋이후의 워킹트리와 index의 수정사항 모두 사라짐. (변경을 커밋하지 않았다면 유용).
-
git reset HEAD^
- 최종 커밋을 취소. 워킹트리는 보존됨. (커밋은 했으나 push하지 않은 경우 유용)
-
git reset HEAD~2
- 마지막 2개의 커밋을 취소. 워킹트리는 보존됨.
-
git reset --hard HEAD~2
- 마지막 2개의 커밋을 취소. index 및 워킹트리 모두 원복됨.
-
git reset --hard ORIG_HEAD
- 머지한 것을 이미 커밋했을 때, 그 커밋을 취소. (잘못된 머지를 이미 커밋한 경우 유용)
-
git revert HEAD
- HEAD에서 변경한 내역을 취소하는 새로운 커밋 발행(undo commit). (커밋을 이미 push 해버린 경우 유용)
Repository
-
git clone 저장소주소 폴더명
- 원격저장소를 복제하여 저장소를 생성합니다. 폴더명을 생략가능합니다.
-
git fetch
- 원격저장소의 변경사항 가져와서 원격브랜치를 갱신합니다.
-
git pull
- git fetch에서 하는 원격저장소의 변경사항을 가져와서 지역브랙치에 합치는 작업을 한꺼번에 합니다. 파라미터로 풀링할 원격저장소와 반영할 지역브랜치를 줄 수 있습니다.
-
git push
- 파라미터를 주지 않으면 origin 저장소에 푸싱하며 현재 지역브랜치와 같은 이름의 브랜치에 푸싱합니다. --dry-run옵션을 사용하면 푸싱된 변경사항을 확인할 수 있습니다. 로컬에서 tag를 달았을 경우에 기본적으로 푸싱하지 않기 때문에 git push origin태그명이나 모든 태그를 올리기 위해서 git push origin --tags를 사용해야 합니다.
-
git remote add 이름 저장소주소
- 새로운 원격 저장소를 추가합니다.
-
git remote
- 추가한 원격저장소의 목록을 확인할 수 있습니다.
-
git remote show 이름
- 해당 원격저장소의 정보를 볼 수 있습니다.
-
git remote rm 이름
- 원격저장소를 제거합니다.
Submodule
-
git submodule
- 연관된 하위모듈을 확인할 수 있습니다.
-
git submodule add 저장소주소 서브모듈경로
- 새로운 하위모듈을 해당경로에 추가합니다. 추가만하고 초기화 하지는 않으며 커밋해쉬앞에 마이너스(-) 표시가 나타납니다.
-
git submodule init 서브모듈경로
- 서브모듈을 초기화 합니다.
-
git submodule update 서브모듈경로
- 서브모듈의 변경사항을 적용합니다.(저장소의 최신커밋을 추적하지 않습니다.)
Archive
-
git archive --format=tar --prefix=폴더명/ 브랜치혹은태그 | gzip > 파일명.tar.gz
- 해당 브랜치나 태그를 TAR로 압축한다. --prefix를 주면 압축하일이 해당폴더 안에 생성되도록 할 수 있습니다.
-
git archive --format=zip --prefix=폴더명/ 브랜치혹은태그 > 파일명.zip
- 해당 브랜치나 태그를 ZIP으로 압축한다. --prefix를 주면 압축하일이 해당폴더 안에 생성되도록 할 수 있습니다.
ETC
-
git mergetool
- 설정에 merge.tool의 값에 있는 머지툴을 찾아서 실행합니다.
-
git gc
- 저장소의 로그를 최적화 합니다. 로그가 변경되지는 않고 저장하는 방식만 최적화 합니다. --aggressive옵션을 주면 더 자세하게 최적화합니다.
-
git rev-parse --show-toplevel
- git 저장소내에서 입력하면 루트디렉토리를 알려줍니다.
-
git fsck
- Repository에 에러가 있는지 검증
-
git format-patch
- e-mail submission을 준비한다. (Linux kernel-style)
-
git am
- Apply patches e-mailed in from your contributors.
-
git daemon
- 익명의 사용자가 Repository를 download할 수 있게 해준다.
-
git shell
- can be used as a restricted login shell for shared central repository users.
Stash save/pop
임시로 Stash저장소에 저장하고 되돌리는 방법은 아래와 같다.
Remove Untracked files
아래의 명령어를 사용하면 된다.
But beware... there's no going back. Use -n
or --dry-run
to preview the damage you'll do.
- If you want to also remove directories: run
git clean -f -d
- If you just want to remove ignored files: run
git clean -f -X
- If you want to remove ignored as well as non-ignored files: run
git clean -f -x
요약하면, 예외처리된 파일과 디렉터리만 제거하고 싶다면 git clean -dfX
, 관리되지 않는 파일을 전부 지우고 싶다면 git clean -dfx
를 입력하면 된다.
Remove last commit
마지막 커밋을 취소하는 방법은 아래와 같다.
참고로 ^
는 1회 전 이란 의미가 있다. 따라서 HEAD^
는 최신 커밋의 직전 커밋을 의미한다.
Revert modify content (Not staging area)
수정했지만 아직 스테이지 영역에 추가하지 않은 파일을 되돌릴 때.
Revert modify content (Staging area)
수정했고 스테이지 영역에 추가한 파일을 다시 스테이지에서 제거할 때.
HEAD 커밋 메시지만 수정할 때
HEAD 이전 커밋 메시지 수정
세 번째 전 메시지 까지 수정할 경우
리비전 개수를 확인하는 방법
Git ZIP Export
Git 으로 작업한 뒤에 git 관련 파일을 제외하고 순수 소스 파일만 필요할 때가 있다. 기존의 export 기능인데, git 에서는 아래와 같은 명령어를 사용하면 된다.
이와 같이 하면 해당 디렉토리에 out.zip 으로 압축되어 저장 된다.
SSL 검증 끄기
설정으로 끄거나:
환경 변수 GIT_SSL_NO_VERIFY=0
를 사용하면 된다.
CA 인증서 경로 확인
- git 에서 https repository 연결시 SSL 인증서 오류 해결법
- [curl.haxx.se/docs/sslcerts.html curl - SSL CA Certificates]
상세 로그 확인
Revert
대개 특정 Commit의 작업을 취소하려는 경우, Rebase작업을 통해 Commit을 삭제하려고 시도하기 보다는, 취소하려는 Commit의 작업 내용과 정 반대되는 새로운 Commit을 만들어 붙이는 방법(Revert)으로 Commit을 삭제한 것과 동일한 효과를 만들어 주는 방법을 사용합니다. 이렇게 하면 소스코드 타임라인이 다소 지저분해지기는 하지만, Rebase작업을 통해 Commit ID가 바뀌면서 발생하는 혼란에 비하면 아주 작은 문제라고 할 수 있습니다.
리베이스 중 충돌상황 발견시 해결 방법
git pull
또는 git fetch
받으면, 다음과 같이 그래프나 나뉠 수 있다.
git log10a
* a05b178 (HEAD -> master) Fix: Error in assignment of synchronized values.
| * 78b286b (origin/master, origin/HEAD) Create main() funcion.
|/
* 5fde85e Update default values.
* 6e14891 (tag: 1.1.3) Update version: 1.1.3
* 52535e6 Handled the StopIteration exception.
* d96d377 (tag: 1.1.2) Update version: 1.1.2
* 84821f7 Create kill_process() method.
* 8c470ac (tag: 1.1.1) Update version: 1.1.1
* 3cb8450 Add prop: refresh_error_threshold
* 296782c Refactoring class constructors.
그래프 병합을 위해, 리베이스 명령을 날리는 중 충돌이 발생되면 다음과 같은 에러가 출력된다.
$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: Fix: Error in assignment of synchronized values.
Using index info to reconstruct a base tree...
M av_stream_video.app.py
M av_stream_video_server.py
Falling back to patching base and 3-way merge...
Auto-merging av_stream_video_server.py
CONFLICT (content): Merge conflict in av_stream_video_server.py
Auto-merging av_stream_video.app.py
error: Failed to merge in the changes.
Patch failed at 0001 Fix: Error in assignment of synchronized values.
hint: Use 'git am --show-current-patch' to see the failed patch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
상태를 확인하면 다음과 같이 출력된다.
$ git status
rebase in progress; onto 78b286b
You are currently rebasing branch 'master' on '78b286b'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: av_stream_video.app.py
Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: av_stream_video_server.py
Unmerged paths
항목을 확인하기 위해, diff를 찍어보면 다음과 같이 출력된다.
git diff
diff --cc av_stream_video_server.py
index b960b49,9287542..0000000
--- a/av_stream_video_server.py
+++ b/av_stream_video_server.py
@@@ -172,9 -188,9 +188,13 @@@ class StreamVideoServer
if not self.is_opened_video():
self.open_video()
- while not self.exit_flag.value:
+ while not self._get_exit_flag():
++<<<<<<< HEAD
+ if self.refresh_flag:
++=======
+ if self._get_refresh_flag():
++>>>>>>> Fix: Error in assignment of synchronized values.
print_out(f'StreamVideoServer.run() [REFRESH] -> Flag is is enabled.')
reconnect_result = self.reopen_video()
if reconnect_result:
vim으로 해당 파일을 편집한 후, 파일을 추가한다.
다시, 상태를 확인해 본다.
git status
rebase in progress; onto 78b286b
You are currently rebasing branch 'master' on '78b286b'.
(all conflicts fixed: run "git rebase --continue")
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: av_stream_video.app.py
modified: av_stream_video_server.py
리베이스를 완료하고 싶다면 위에 적힌대로, 입력하면 된다:
상태를 확인하면 1개의 커밋이 완료되어 있다.
git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
그래프 상태를 확인하면 다음과 같이, 깔끔하게 머지되어 있다.
git log10a
* b202582 (HEAD -> master) Fix: Error in assignment of synchronized values.
* 78b286b (origin/master, origin/HEAD) Create main() funcion.
* 5fde85e Update default values.
* 6e14891 (tag: 1.1.3) Update version: 1.1.3
* 52535e6 Handled the StopIteration exception.
* d96d377 (tag: 1.1.2) Update version: 1.1.2
* 84821f7 Create kill_process() method.
* 8c470ac (tag: 1.1.1) Update version: 1.1.1
* 3cb8450 Add prop: refresh_error_threshold
* 296782c Refactoring class constructors.
Tips
관련 내용은 위의 링크에 들어가서 확인해 보자:
- 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로의 자동 변환 막기