(4)-6.Git+명령어+정리

[Git & Gerrit Home으로 돌아가기]

Git 명령어 정리

  • 1. Git 명령어 정리
  • 2. Git 에서의 공간
  • 3. Git 의 이모저모
  • 4. 그림으로 보는 명령어
  • 5. 환경 설정 명령어
  • 6. 기본 명령어
  • 7. 브랜치와 태그
  • 8. 로그 관리
  • 9. 원격저장소
  • 10. 기타 명령어
  • [[참고자료]|Git명령어정리-참고자료]

1. Git 명령어 정리
본 글은 웹프로그래밍 블로거로 유명한 Outsider님의 "Git 명령어 정리"[1] 의 글을 CCL (CC BY-NC-SA) 에 의거하여 재정리하였으며,  Scott Chacon, Pro Git book 번역본 ( CC BY-NC-SA ) [4] 의 용어를 기준으로 글을 작성했다. Git 는 다양한 기능을 수반하기 위하여 수많은 명령어가 있지만 여기서는 우리가 작업하는데에 있어서 꼭 필요한 일부만을 정리하였다.   

2. Git 에서의 공간

Git 명령어를 익히기위해서 우선 알아야할 사항으로 Git 의 공간 개념을 알아야한다. Git는 아래의 그림처럼 작업공간, 준비영역, 로컬 저장소, 원격 저장소으로 4개의 공간으로 나뉘어 있다. 작업공간은 사용자가 작업하는 소스코드가 있는 폴더를 말하며, 준비영역은 로컬저장소에 저장(커밋)하기전에 어떠한 파일들을 적용할 것인지 준비하는 공간이다. 그리고 커밋을 통해 로컬 저장소(자신의 컴퓨터상의 저장소)에 저장되며, 올리기(push)를 통해서 원격 저장소(원격 서버상의 저장소로 GitHub 와 같은 저장소를 말한다)에 올려지게 된다.

3. Git 의 이모저모

1) Git는 분산 소스 관리 시스템 이다. 2) Git은 빈 디렉토리는 추적하지 않는다. 3) 관리하지 않을 파일은 .gitignore 파일에 추가한다. 4) HEAD는 현재 브랜치의 가장 최신 커밋을 의미한다. 5) 기본 원격 저장소를 origin 라고 부른다. 6) 기본 브랜치를 master 라고 부른다.

4. 그림으로 보는 명령어

아래에서 다룰 명령어를 그림으로 정리해 보았다. 아래의 그림에서 브랜치에 대한 내용은 4개의 공간과 브랜치간의 서로 상이한 개념으로 함께 다룰 수 없었지만 아래의 명령어들을 보면서 익일 수 있을 것이다.

5. 환경 설정 명령어

git config -global --list  : 현재 설정정보 조회할 수 있다. -global옵션은 전역 설정에 대한 옵션이며, 현재 프로젝트에만 적용할때는 적용되지 않는다.
git config --global user.name "사용자명"  : 사용자명을 등록한다. (필수)
git config --global user.email "이메일주소"  : 이메일 주소를 등록한다. (필수)
git config --global color.ui "auto" : 터미널에 표시되는 메시지에 칼라를 표시해준다.

6. 기본 명령어

git init : 현재 디렉토리에 git 저장소를 생성한다.
git add 파일명 : git add는 2가지를 하는데 untracked files의 파일들을 git가 추적하도록 하거나 파일은 수정했지만 아직 준비 영역에 올라가지 않은(Changed but not updated) 파일들을 준비 영역에 올린다. -i 옵션을 주면 대화형모드가 시작되며 파일의 일부분만 선택해서 스테이징하는 것이 가능하다. -p 옵션을 사용하면 -i 대화형모드없이 바로 패치모드를 사용할 수 있다.
git commit -m "커밋메시지" : 준비 영역에 올라가 있는 파일들을 커밋한다. -m 은 커밋할 때 메시지를 주는 옵션으로 여러 줄의 커밋 메시지를 쓸 경우 -m 을 여러개 사용할 수 있습니다. -a 옵션을 사용하면 스테이징에 올리는 작업과 커밋을 동시에 할 수 있다.(추적되지 않는 파일은 추가하지 않는다.) -m을 사용하지 않을때 -v옵션을 사용하면 편집기에 커밋하려는 변경 사항의 다른점을 보여준다. 특정 파일만 커밋하려면 마지막에 파일명을 추가해주면 된다.
git status : 커밋되지 않은 변경 사항을 조회한다.
git diff : 준비 영역과 현재 작업공간의 차이점을 보여준다. --cached 옵션을 추가하면 준비 영역과 로컬 저장소의 차이점을 볼 수 있다. git diff HEAD를 입력하면 로컬 저장소, 준비 영역, 작업 공간의 차이점을 모두 볼 수 있다. 파라미터로 log와 동일하게 범위를 지정할 수 있으며 --stat 를 추가하면 변경사항에 대한 통계를 볼 수 있다.
git mv 파일명 새파일명 : 기존에 존재하는 파일을 새파일로 변경한다. 변경 이력은 그대로 유지된다.
git checkout – 파일명 : 아직 스테이징이나 커밋을 하지 않은 파일의 변경 내용을 취소하고 이전 커밋상태로 되돌린다. svn에서 revert와 동일하다.

7. 브랜치와 태그

git branch : 현재 존재하는 브랜치를 조회한다. -r 옵션을 사용하면 원격 저장소의 브랜치를 확인할 수 있다. 
git branch 브랜치명B 브랜치명A : 브랜치명A에서 새로운 브랜치인 브랜치명B를 만든다. (git에서 기본 브랜치는 master 라는 이름을 사용한다.)
git branch 브랜치명 : 현재의 브랜치에서 브랜치명의 새로운 브랜치를 만든다. (체크아웃은 하지 않는다.)
git branch -d 브랜치명 : 브랜치를 삭제한다. 이때에는 해당 브랜치를 선택하지 않은 상태이고, 해당 브랜치는 병합된 상태이여야 한다. 필요에 의해서는 -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 옵션을 주면 작업공간에 합치지만 커밋은 하지 않기 때문에 여러 개의 커밋을 합쳐서 커밋할 수 있다.

8. 로그 관리

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옵션을 사용하다.
git revert 커밋명 : 기존의 커밋에서 변경한 내용을 취소해서 새로운 커밋을 만든다. -n 옵션을 사용하면 바로 커밋하지 않기 때문에 revert를 여러 번 한 다음에 커밋할 수 있다. (항상 최신의 커밋부터 revert 해야 한다.)
git reset 커밋명 : 이전 커밋을 수정하기 위해서 사용된다. --soft 옵션을 사용하면 이전 커밋을 스테이징하고 커밋은 하지 않는다. --hard옵션은 저장소와 작업공간에서 커밋을 제거합니다. git reset HEAD^와 같이 입력하면 최근 1개의 커밋을 취소할 수 있습니다.
git rebase -i 커밋범위 : -i옵션으로 대화형모드로 커밋 순서를 변경하거나 합치는 등의 작업을 할 수 있다.

9. 원격저장소

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 이름 : 원격 저장소를 제거한다.

10. 기타 명령어

git archive --format=tar --prefix=폴더명/ 브랜치혹은태그 | gzip > 파일명.tar.gz git archive --format=zip --prefix=폴더명/ 브랜치혹은태그 > 파일명.zip : 해당 브랜치나 태그를 압축 파일로 만든다. --prefix 를 주면 압축파일이 해당 폴더 안에 생성되도록 할 수 있다.
git mergetool : 설정에 merge.tool의 값에 있는 머지툴을 찾아서 실행한다.
git gc : 저장소의 로그를 최적화 합니다. 로그가 변경되지는 않고 저장하는 방식만 최적화 한다. --aggressive 옵션을 주면 더 자세하게 최적화한다.
git rev-parse --show-toplevel : git 저장소내에서 입력하면 루트 디렉토리를 알려준다.

[참고자료]

[1] Outsider, "Git 명령어 정리" (CC BY-NC-SA), {+}http://blog.outsider.ne.kr/572+ [2] git 공식 홈페이지, {+}http://git-scm.com/+ [3] github 공식 홈페이지, {+}https://github.com/+ [4] Scott Chacon, Pro Git book 번역본 ( CC BY-NC-SA ), {+}http://git-scm.com/book/ko/+ [5] {+}https://en.wikipedia.org/wiki/Distributed_version_control_system+ [6] [오픈소스] 소스 관리 시스템 - GitHub 사용법 1부- [7] [오픈소스] 소스 관리 시스템 - Github 사용법 2부- [8] [오픈소스] 소스 관리 시스템 - Github 사용법 3부-
[출처] [오픈소스] 소스 관리 시스템 - Git 명령어 정리 - (오픈소스 소프트웨어 & 하드웨어: 로봇 기술 공유 카페 (오로카)) |작성자 표윤석