git cheatsheet

초기 설정 후에는 주로 add, commit, push만 가지고 git을 써왔는데(이마저도 atom을 사용하면 클릭 몇 번으로 대체된다), 한계가 느껴져서 새로운 기능을 쓰게 될 때마다 정리를 하려고 한다.

레포 생성

$ git init [projecet-name]
$ git clone [url]

계정 정보 변경

$ git config --global user.name "이름"
$ git config --global user.email "이메일"

# 프로젝트 하나만 변경하고 싶은 경우
$ git config --local user.name "이름"
$ git config --local user.email "이메일"

계정 정보 조회

# 전역 설정 설정 정보 조회
$ git config --glogbal --list

# 저장소별 설정 정보 조회
$ git config --list

branch control

생성 - 변경 - 병합 - 삭제

# 현재 branch list 출력
$ git branch

# branch 생성
$ git branch [branch-name]

# branch 체크아웃(변경)
$ git checkout [branch-name]

# 생성 + 체크아웃
$ git checkout -b [branch-name]

# 병합
$ git merge [branch]

# 삭제
$ git branch -d [branch-name]

리모트 저장소

현재 프로젝트에 등록된 리모트 저장소 확인. 저장소를 Clone하면 origin이라는 리모트 저장소가 자동으로 등록됨

$ git remote
origin

-v 옵션으로 단축이 름과 url 표시 가능. 저장소가 여러개 있다면 모두 표시.

$ git remote -v
origin	https://github.com/Moons08/Moons08.github.io (fetch)
origin	https://github.com/Moons08/Moons08.github.io (push)

저장소 추가

git remote add [단축이름] [url]

추가한 뒤에는 fetch로 로컬 저장소에는 없지만 추가된 저장소에 있는 것을 가져올 수 있음

$ git fetch [단축이름]

위에서 말했듯, 저장소를 Clone하면 자동으로 리모트 저장소를 origin이라는 이름으로 추가한다. 그래서 나중에 git fetch origin을 실행하면 Clone 이후에 수정된 것을 모두 가져온다. fetch는 리모트 저장소의 데이터를 모두 로컬로 가져오지만, 자동으로 머지하지 않는다. 따라서 로컬에서 하던 작업을 정리한 후 수동으로 머지해야 한다. 자동으로 데이터를 가져와서 머지까지 완료하려면 git pull을 사용하면 된다.

저장소 살펴보기

리모트 저장소의 구체적인 정보 확인 가능.

$ git remote show [단축이름]

저장소 이름 변경/ 삭제

$ git remote rename [단축이름] [바꿀이름]
$ git remote rm [단축이름]

커밋 히스토리

git log 명령은 저장소의 커밋 히스토리를 시간순으로 보여준다.
-p 옵션은 각 커밋의 diff 결과를 보여준다. -2 는 최근 두 개의 결과만 보여주는 옵션이다.

$ git log -p -2
commit 1b857a03ed515b50792a50e74f645f0db36ff319 (HEAD -> master, origin/master)
Author: Moons08 <mskk0805@gmail.com>
Date:   Mon Aug 13 13:51:09 2018 +0900

    add post

diff --git a/_posts/2018-08-13-saver_error.md b/_posts/2018-08-13-saver_error.md
new file mode 100644
index 0000000..d3de945
--- /dev/null
+++ b/_posts/2018-08-13-saver_error.md
@@ -0,0 +1,81 @@
+---
+title: 오늘의 에러 - 180813
+date: 2018-08-13
+tags: Error deeplearning
+category: programming
+---
+
+신경망 모델을 클래스로 구현해보던 중 `Saver`에서 에러(`ValueError: No variables to save`)가 발생했다.
+
+
:...skipping...
commit 1b857a03ed515b50792a50e74f645f0db36ff319 (HEAD -> master, origin/master)
Author: Moons08 <mskk0805@gmail.com>
Date:   Mon Aug 13 13:51:09 2018 +0900
(... 생략...)

위 옵션은 직접 diff를 실행한 것과 같은 결과를 출력한다. 따라서 동료가 무엇을 커밋했는지 리뷰하고 빨리 조회하는데 유용.

줄 단위 대신 단어 단위로 보려면 -U1 --word-diff 옵션을 이용한다. 추가한 단어는 {+ +}기호, 삭제한 단어는 [- -]기호가 둘러싼다. diff는 기본적으로 3줄을 보여주는데, 단어 단위로 볼 때는 굳이 3줄을 볼 필요가 없기 때문에 -U1옵션을 주어서 해당 줄만 보이게 한다.

–stat

git log --stat 명령은 각 커밋의 통계 정보를 조회할 수 있다.

commit c253c6d09a7544d91e24c345c0c73ed841279cb6 (HEAD -> master, origin/master, origin/HEAD)
Author: Moons08 <mskk0805@gmail.com>
Date:   Thu Aug 16 10:12:00 2018 +0900

    fix doc-string

    - denoted examples
    - add see also

 pandas/core/indexes/base.py | 6 ++++++
 1 file changed, 6 insertions(+)

commit bc8ae8a6857e0a79768d3bf2138c92a06df68fc0
Author: Moons08 <mskk0805@gmail.com>
Date:   Wed Aug 15 19:38:50 2018 +0900

    fix typo

 pandas/core/indexes/base.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

–pretty

--pretty옵션을 이용해 다양한 형식의 로그를 확인할 수 있다. oneline, short, full, fuller, format 등이 있다.
--graph옵션과 함께 사용할 경우 더 유용하다. 이 옵션은 브랜치와 머지 히스토리를 보여주는 아스키 그래프를 출력한다.

$ git log --pretty=oneline
$ git log --oneline

이외에도 다양한 옵션이 존재한다.

옵션 설명
-p 각 커밋에 적용된 패치를 보여준다.
--word-diff diff 결과를 단어단위로 보여준다.
--stat 각 커밋에서 수정된 파일 통계정보를 보여준다.
--shortstat --stat명령 중 수정한 파일, 추가된 줄, 삭제된 줄만 보여준다.
--relative-date 정확한 시간이 아닌 산대적 형식의 시간으로 보여준다.
--graph 브랜치와 머지 히스토리 정보까지 보여준다.
--abbrev-commit SHA-1 체크섬을 처음 몇자만 보여준다.
--oneline --pretty=oneline + --abbrev-commit

조회 제한

조회 범위를 제한하는 옵션도 있다.

옵션 설명
-(n) 최근 N개 커밋만 조회
--since, --after 명시한 날짜 이후 커밋만 검색
--until, --before 명시한 날짜 이전 커밋만 검색
--author 입력한 저자의 커밋만 보여준다
--commiter 입력한 커미터의 커밋만 보여준다

fin.

댓글남기기