SlideShare a Scribd company logo
1 of 22
Git

     DVCS
decntralized SCM


                   nnoco
Git의 특성
Distributed Development




전체 개발 이력을 각 개발자의 로컬로 복사본을 제공하고, 변경된 이력을 다시
하나의 저장소로 복사한다.
이러한 변경은 추가 개발 지점을 가져와, 로컬 개발 지점과 동일하게 병합(merge)할 수 있다.
저장소는 Git protocol 및 HTTP로 쉽고 효율적(특별한 웹 서버 구성없이)으로 접근할 수 있다.
Strong support
  for non-linear development



신속하고 편리한 branch 및 merge 지원, 비선형(여러 갈래) 개발 이력을 시각화하고 탐색할 수
있는 강력한 도구를 제공한다.
Efficient handling
           of large projects



Git은 매우 빠르고, 대형 프로젝트나 이력이 많은 작업에 매우 햅리적이다.
Git은 대부분의 다른 버전관리 시스템보다 빠르게 요청한다. 그리고 일부 작업에서는
더 빠르게 진행한다. 또한. 최근의 정상급 오픈소스 버전관리 시스템보다
장기간의 수정내역을 매우 효율적인 압축방법을 사용한다.
Cryptographic authentication
         of history



Git의 이력은 성공한 개발 이력의 commit에 의해 개정명으로 저장된다. 일단 그것이 배포되면
그것을 모르고 예전 버전으로 변경하는 것은 불가능하다. 또한, 그것들을 암호화 할 수 있다.
Toolkit design




UNIX의 전통에 따라, Git은 C로 작성된 많은 소규모 도구모음이다. 그리고 많은 스크립트들이
기능 보강을 제공한다. Git은 새로운 기발한 작업을 위한 손쉬운 사용과 쉬운 스크립팅을 위한
도구를 제공한다.
Git Data Transport Commands
                                                                     http://osteele.com



                        commit -a

            add(-u)                     commit

                                                                       push



                                                          local                         remote
workspace                 index
                                                        repository                    repository


                                       pull or rebase

                                                                        fetch

                       checkout HEAD
 revert




            checkout
 compare




                         diff HEAD

              diff
알아야 할 사항
• git의 3가지 저장소 구성
    • Local Repository : 커밋한 소스가 보관되는 저장소
    • 작업 트리 : 프로젝트 워크스페이스
    • 스테이징 영역 : 로컬과 작업트리 사이의 버퍼영역으로 커밋될 대상이 저장

• 빈 디렉토리는 추적하지 않음

• 형상 관리를 하지 않을 파일은 .gitignore 파일에 추가

• HEAD는 현재 브랜치의 가장 최신 커밋을 의미

• origin : 기본 원격 저장소
환경 설정

• git conifg --global --list
    • 현재 설정정보 조회

• git config --global user.name “사용자명”
    • 사용자명 등록(필수)

• git config --global user.email “이메일 주소”
    • 이메일 주소 등록(필수)

• git config --global color.ui “auto”
    • 터미널의 메시지에 색깔 표시
기본적인 명령어

• git –version
    • 설치된 git의 버전 확인

• git init
    • 현재 디렉토리에 git 저장소 생성

• git add “파일명”
    • 추적되지 않은 파일을 추적하도록 추가
    • 수정된 파일을 버퍼영역에 추가
    • -i : 대화형모드 – 파일의 일부분만 선택해서 스테이징
    • -p : 대화형모드 없이 바로 패치모드 사용

• git commit (–m “커밋 메시지”|-v) [-a]
    • 커밋 메시지와 함께 스테이징 영역의 파일을 로컬 저장소에 커밋
    • -a : 추적된 파일을 스테이징 영역에 올리고, 커밋을 동시에 실행
    • -v : -m을 사용하지 않을 때 파일의 변경사항을 커밋 메시지로 등록

• git commit –c HEAD –a --ammend
    • 지정한 커밋의 로그메시지를 다시 사용하여 기존 커밋 수정
    • -c : 기존 메시지를 수정할 수 있는 편집기를 실행
기본적인 명령어(계속)

• git status
    • 커밋되지 않은 변경사항을 조회

• git diff
    • 스테이징 영역과 현재 작업트리의 차이점을 출력
    • --cached : 스테이징 영역과 저장소의 차이점을 출력
    • git diff HEAD : 저장소, 스테이징 영역, 작업트리의 차이점을 모두 출력
    • --stat 추가 : 변경사항에 대한 통계를 출력

• git mv 파일명 새파일명
    • 기존에 조재하는 파일을 새파일로 이동. 변경이력은 그대로 유지

• git checkout --파일명
    • 스테이징이나 커밋을 하지 않은 파일의 변경내용을 취소하고,
       이전 커밋 상태로 되돌림(svn에서 revert와 동일)
Branch와 Tag

• git branch
    • 현재 존재하는 브랜치 조회
    • -r : 원격 저장소의 브랜치 확인

• git branch 브랜치명B 브랜치명A
    • 브랜치명A에서 브랜치명B로 새로운 브랜치 생성
    ※ 기본 브랜치의 이름은 master

• git branch 브랜치명
    • 브랜치명의 새로운 브랜치 생성(체크아웃은 하지 않음)

• git branch -m 존재하는브랜치명 새로운브랜치명
    • 존재하는 브랜치를 새로운 브랜치로 변경
    • 이미 존재하는 브랜치명이 있을 경우에는 에러 발생
    • -m 옵션을 사용하여 덮어쓰기

• git tag 태그명 브랜치명
    • 브랜치명의 현재 시점에 태그명으로 된 태그를 붙임
    • 태그명과 브랜치명 생략할 경우 현재 존재하는 태그 목록을 출력
Branch와 Tag(계속)

• git checkout 브랜치명/태그명
    • 해당 브랜치나 태그로 작업트리를 변경

• git checkout -b 브랜치명B 브랜치명A
    • 브랜치명A에서 새로운 브랜치 브랜치명B를 만들면서 체크아웃

• git rebase 브랜치명
    • 브랜치명의 변경사항을 현재 브랜치에 적용

• git merge 브랜치명
    • 브랜치명의 브랜치를 현재 브랜치로 병합
    • --squash : 브랜치명의 모든 커밋을 하나의 커밋으로 만듬

• git cherry-pick 커밋명
    • 커밋명의 특정 커밋만을 선택해서 현재 브랜치에 커밋으로 만듬
    • -n : 작업트리에 합치지만 커밋은 하지 않음
로그 관리

• git log
    • 커밋 로그를 출력
    • -1 or -2 : 출력할 커밋로그의 갯수를 숫자만큼 지정
    • --pretty=oneline : 한줄로 간단히 보여줌
    • --pretty=format:”%h %s” : 형식을 지정하여 출력
    • -p : 변경된 내용을 함께 출력
    • --since=“5 hours”
        --before=“5 hours” : 시간을 지정하여 출력
    • --graph : 브랜치 트리 출력

• git log 커밋명
    • 해당 커밋명의 로그 출력
    • ^은 -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 : 대화형 모드로 커밋 순서를 변경하거나 병합 등의 작업
원격 저장소

• 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 이름
    • 원격 저장소 제거
서브 모듈

• git submodule
    • 연관된 하위모듈을 확인

• git submodule add 저장소주소 서브모듈경로
    • 새로운 하위모듈을 해당 경로에 추가.
       추가만하고 초기화하진 않으며 커밋해시 앞에 - 기호가 나타남

• git submodule init 서브모듈경로
    • 서브모듈을 초기화

• git submodule update 서브모듈경로
    • 서브모듈의 변경사항을 적용
       (저장소의 최신커밋을 추적하지 않음)
기타 명령어

• 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 저장소내에서 입력하면 루트디렉토리를 알려줌
참고 자료
• Git 홈페이지 (http://git-scm.com/about)
• Git과 Github 안내 (http://blog.hjf.pe.kr/37)
• Git 명령어 정리 (http://blog.outsider.ne.kr/572)

More Related Content

What's hot

git, git flow
git, git flowgit, git flow
git, git flow
eva
 

What's hot (20)

Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
 
git, git flow
git, git flowgit, git flow
git, git flow
 
Git
GitGit
Git
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git 사용법 공유 + Unity3D with git
Git 사용법 공유 + Unity3D with gitGit 사용법 공유 + Unity3D with git
Git 사용법 공유 + Unity3D with git
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식
 
Git tutorials
Git tutorialsGit tutorials
Git tutorials
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)
 
Git의 개념과 사용
Git의 개념과 사용Git의 개념과 사용
Git의 개념과 사용
 
디자이너를위한Git #1/2
디자이너를위한Git #1/2디자이너를위한Git #1/2
디자이너를위한Git #1/2
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육
 
11. git basic
11. git basic11. git basic
11. git basic
 
140109 팀프로젝트 협업툴
140109 팀프로젝트 협업툴140109 팀프로젝트 협업툴
140109 팀프로젝트 협업툴
 
git, 이해부터 활용까지
git, 이해부터 활용까지git, 이해부터 활용까지
git, 이해부터 활용까지
 
이클립스로 GIT 사용하기
이클립스로 GIT 사용하기이클립스로 GIT 사용하기
이클립스로 GIT 사용하기
 
Git branch stregagy & case study
Git branch stregagy & case studyGit branch stregagy & case study
Git branch stregagy & case study
 
Github 사용법
Github 사용법Github 사용법
Github 사용법
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)
 

Viewers also liked

Viewers also liked (20)

Manual como-plantar-un-arbol
Manual como-plantar-un-arbolManual como-plantar-un-arbol
Manual como-plantar-un-arbol
 
Tech thursdays / GIT
Tech thursdays / GITTech thursdays / GIT
Tech thursdays / GIT
 
Learning git
Learning gitLearning git
Learning git
 
Version control with GIT
Version control with GITVersion control with GIT
Version control with GIT
 
Git vs Subversion: ¿Cuando elegir uno u otro?
Git vs Subversion: ¿Cuando elegir uno u otro?Git vs Subversion: ¿Cuando elegir uno u otro?
Git vs Subversion: ¿Cuando elegir uno u otro?
 
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung FuJAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
JAZOON'13 - Bartosz Majsak - Git Workshop - Kung Fu
 
A proven path for migrating from clearcase to git and or subversion
A proven path for migrating from clearcase to git and or subversionA proven path for migrating from clearcase to git and or subversion
A proven path for migrating from clearcase to git and or subversion
 
팀프로젝트 활짝 피우기
팀프로젝트 활짝 피우기팀프로젝트 활짝 피우기
팀프로젝트 활짝 피우기
 
Dropbox 꿀팁
Dropbox 꿀팁Dropbox 꿀팁
Dropbox 꿀팁
 
TDD with JUnit 2
TDD with JUnit 2TDD with JUnit 2
TDD with JUnit 2
 
강의 전 준비(GitHub가입, git 클라이언트 설치)
강의 전 준비(GitHub가입, git 클라이언트 설치)강의 전 준비(GitHub가입, git 클라이언트 설치)
강의 전 준비(GitHub가입, git 클라이언트 설치)
 
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
 
Git Introduction
Git IntroductionGit Introduction
Git Introduction
 
Slideshare font test
Slideshare font testSlideshare font test
Slideshare font test
 
Git 더하기 GitHub 강의 전 준비
Git 더하기 GitHub 강의 전 준비Git 더하기 GitHub 강의 전 준비
Git 더하기 GitHub 강의 전 준비
 
Tdd with JUnit 1
Tdd with JUnit 1Tdd with JUnit 1
Tdd with JUnit 1
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 
Intro To Git
Intro To GitIntro To Git
Intro To Git
 
Git Presentation
Git PresentationGit Presentation
Git Presentation
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
 

Similar to Git

Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션
Dabi Ahn
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
Yunkyu Choi
 
Git from google techtalks by Randal
Git from google techtalks by RandalGit from google techtalks by Randal
Git from google techtalks by Randal
yagurchoi
 
[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab
NAVER D2
 

Similar to Git (20)

Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating Introduction
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git 기본
Git 기본Git 기본
Git 기본
 
Git
Git Git
Git
 
Git
GitGit
Git
 
Git from google techtalks by Randal
Git from google techtalks by RandalGit from google techtalks by Randal
Git from google techtalks by Randal
 
Fun git hub
Fun git hubFun git hub
Fun git hub
 
Git & Github Seminar-2
Git & Github Seminar-2Git & Github Seminar-2
Git & Github Seminar-2
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
git-basic-commands
git-basic-commandsgit-basic-commands
git-basic-commands
 
About git
About gitAbout git
About git
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 
제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1
 
Git & GitHub
Git & GitHubGit & GitHub
Git & GitHub
 
Yobi-hands-on-lab-at-d2fest
Yobi-hands-on-lab-at-d2festYobi-hands-on-lab-at-d2fest
Yobi-hands-on-lab-at-d2fest
 
[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab
 

More from Junyoung Lee (6)

웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
Yapp Advanced Android 3주차 - BaaS.io 이해 및 사용
Yapp Advanced Android 3주차 - BaaS.io 이해 및 사용Yapp Advanced Android 3주차 - BaaS.io 이해 및 사용
Yapp Advanced Android 3주차 - BaaS.io 이해 및 사용
 
Yapp a.a 2 2 sugar orm
Yapp a.a 2 2 sugar ormYapp a.a 2 2 sugar orm
Yapp a.a 2 2 sugar orm
 
Yapp a.a 2 2 android annotations
Yapp a.a 2 2 android annotationsYapp a.a 2 2 android annotations
Yapp a.a 2 2 android annotations
 
Yapp a.a study 2 reflection+annotation
Yapp a.a study 2 reflection+annotationYapp a.a study 2 reflection+annotation
Yapp a.a study 2 reflection+annotation
 
[Yapp aa] 스터디 과제
[Yapp aa] 스터디 과제[Yapp aa] 스터디 과제
[Yapp aa] 스터디 과제
 

Git

  • 1. Git DVCS decntralized SCM nnoco
  • 3. Distributed Development 전체 개발 이력을 각 개발자의 로컬로 복사본을 제공하고, 변경된 이력을 다시 하나의 저장소로 복사한다. 이러한 변경은 추가 개발 지점을 가져와, 로컬 개발 지점과 동일하게 병합(merge)할 수 있다. 저장소는 Git protocol 및 HTTP로 쉽고 효율적(특별한 웹 서버 구성없이)으로 접근할 수 있다.
  • 4. Strong support for non-linear development 신속하고 편리한 branch 및 merge 지원, 비선형(여러 갈래) 개발 이력을 시각화하고 탐색할 수 있는 강력한 도구를 제공한다.
  • 5. Efficient handling of large projects Git은 매우 빠르고, 대형 프로젝트나 이력이 많은 작업에 매우 햅리적이다. Git은 대부분의 다른 버전관리 시스템보다 빠르게 요청한다. 그리고 일부 작업에서는 더 빠르게 진행한다. 또한. 최근의 정상급 오픈소스 버전관리 시스템보다 장기간의 수정내역을 매우 효율적인 압축방법을 사용한다.
  • 6. Cryptographic authentication of history Git의 이력은 성공한 개발 이력의 commit에 의해 개정명으로 저장된다. 일단 그것이 배포되면 그것을 모르고 예전 버전으로 변경하는 것은 불가능하다. 또한, 그것들을 암호화 할 수 있다.
  • 7. Toolkit design UNIX의 전통에 따라, Git은 C로 작성된 많은 소규모 도구모음이다. 그리고 많은 스크립트들이 기능 보강을 제공한다. Git은 새로운 기발한 작업을 위한 손쉬운 사용과 쉬운 스크립팅을 위한 도구를 제공한다.
  • 8. Git Data Transport Commands http://osteele.com commit -a add(-u) commit push local remote workspace index repository repository pull or rebase fetch checkout HEAD revert checkout compare diff HEAD diff
  • 9. 알아야 할 사항 • git의 3가지 저장소 구성 • Local Repository : 커밋한 소스가 보관되는 저장소 • 작업 트리 : 프로젝트 워크스페이스 • 스테이징 영역 : 로컬과 작업트리 사이의 버퍼영역으로 커밋될 대상이 저장 • 빈 디렉토리는 추적하지 않음 • 형상 관리를 하지 않을 파일은 .gitignore 파일에 추가 • HEAD는 현재 브랜치의 가장 최신 커밋을 의미 • origin : 기본 원격 저장소
  • 10. 환경 설정 • git conifg --global --list • 현재 설정정보 조회 • git config --global user.name “사용자명” • 사용자명 등록(필수) • git config --global user.email “이메일 주소” • 이메일 주소 등록(필수) • git config --global color.ui “auto” • 터미널의 메시지에 색깔 표시
  • 11. 기본적인 명령어 • git –version • 설치된 git의 버전 확인 • git init • 현재 디렉토리에 git 저장소 생성 • git add “파일명” • 추적되지 않은 파일을 추적하도록 추가 • 수정된 파일을 버퍼영역에 추가 • -i : 대화형모드 – 파일의 일부분만 선택해서 스테이징 • -p : 대화형모드 없이 바로 패치모드 사용 • git commit (–m “커밋 메시지”|-v) [-a] • 커밋 메시지와 함께 스테이징 영역의 파일을 로컬 저장소에 커밋 • -a : 추적된 파일을 스테이징 영역에 올리고, 커밋을 동시에 실행 • -v : -m을 사용하지 않을 때 파일의 변경사항을 커밋 메시지로 등록 • git commit –c HEAD –a --ammend • 지정한 커밋의 로그메시지를 다시 사용하여 기존 커밋 수정 • -c : 기존 메시지를 수정할 수 있는 편집기를 실행
  • 12. 기본적인 명령어(계속) • git status • 커밋되지 않은 변경사항을 조회 • git diff • 스테이징 영역과 현재 작업트리의 차이점을 출력 • --cached : 스테이징 영역과 저장소의 차이점을 출력 • git diff HEAD : 저장소, 스테이징 영역, 작업트리의 차이점을 모두 출력 • --stat 추가 : 변경사항에 대한 통계를 출력 • git mv 파일명 새파일명 • 기존에 조재하는 파일을 새파일로 이동. 변경이력은 그대로 유지 • git checkout --파일명 • 스테이징이나 커밋을 하지 않은 파일의 변경내용을 취소하고, 이전 커밋 상태로 되돌림(svn에서 revert와 동일)
  • 13. Branch와 Tag • git branch • 현재 존재하는 브랜치 조회 • -r : 원격 저장소의 브랜치 확인 • git branch 브랜치명B 브랜치명A • 브랜치명A에서 브랜치명B로 새로운 브랜치 생성 ※ 기본 브랜치의 이름은 master • git branch 브랜치명 • 브랜치명의 새로운 브랜치 생성(체크아웃은 하지 않음) • git branch -m 존재하는브랜치명 새로운브랜치명 • 존재하는 브랜치를 새로운 브랜치로 변경 • 이미 존재하는 브랜치명이 있을 경우에는 에러 발생 • -m 옵션을 사용하여 덮어쓰기 • git tag 태그명 브랜치명 • 브랜치명의 현재 시점에 태그명으로 된 태그를 붙임 • 태그명과 브랜치명 생략할 경우 현재 존재하는 태그 목록을 출력
  • 14. Branch와 Tag(계속) • git checkout 브랜치명/태그명 • 해당 브랜치나 태그로 작업트리를 변경 • git checkout -b 브랜치명B 브랜치명A • 브랜치명A에서 새로운 브랜치 브랜치명B를 만들면서 체크아웃 • git rebase 브랜치명 • 브랜치명의 변경사항을 현재 브랜치에 적용 • git merge 브랜치명 • 브랜치명의 브랜치를 현재 브랜치로 병합 • --squash : 브랜치명의 모든 커밋을 하나의 커밋으로 만듬 • git cherry-pick 커밋명 • 커밋명의 특정 커밋만을 선택해서 현재 브랜치에 커밋으로 만듬 • -n : 작업트리에 합치지만 커밋은 하지 않음
  • 15. 로그 관리 • git log • 커밋 로그를 출력 • -1 or -2 : 출력할 커밋로그의 갯수를 숫자만큼 지정 • --pretty=oneline : 한줄로 간단히 보여줌 • --pretty=format:”%h %s” : 형식을 지정하여 출력 • -p : 변경된 내용을 함께 출력 • --since=“5 hours” --before=“5 hours” : 시간을 지정하여 출력 • --graph : 브랜치 트리 출력 • git log 커밋명 • 해당 커밋명의 로그 출력 • ^은 -1과 동일 커밋명에 HEAD^ : 최신 바로 전 커밋 HEAD^^^ : 최신 전전전 커밋 HEAD~3 : HEAD의 3개 이전의 커밋 • git blame 커밋명 • 각 줄 앞에 커밋명과 커밋한 사람 등의 정보 출력
  • 16. 로그 관리(계속) • 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개의 커밋을 취소
  • 17. 로그 관리(계속) • git rebase -i 커밋범위 • -i : 대화형 모드로 커밋 순서를 변경하거나 병합 등의 작업
  • 18. 원격 저장소 • git clone 저장소주소 폴더명 • 원격 저장소를 복제하여 저장소 생성 • 폴더명 생략시 현재 위치 • git fetch • 원격 저장소의 변경사항을 가져와서 원격 브랜치 갱신 • git pull • git fetch에서 하는 원격 저장소의 변경사항을 가져와서 지역 브랜치에 합치는 작업을 한꺼번에 실시. 파라미터로 풀링할 원격 저장소와 반영할 지역 브랜치를 줄 수 있음 • git push • 파라미터를 주지 않으면 origin 저장소에 푸싱 • 현재 지역브랜치와 같은 이름의 브랜치에 푸싱 • --dry-run : 푸싱된 변경사항을 확인 • 로컬에서 tag를 달았을 경우 기본적으로 푸싱하지 않기 때문에 “git push origin 태그명”이나 모든 태그를 올리기 위해서 git push origin --tags 사용
  • 19. 원격 저장소(계속) • git remote add 이름 저장소주소 • 새로운 원격 저장소를 추가 • git remote • 추가한 원격저장소의 목록 확인 • git remote show 이름 • 해당 원격 저장소의 정보 출력 • git remote rm 이름 • 원격 저장소 제거
  • 20. 서브 모듈 • git submodule • 연관된 하위모듈을 확인 • git submodule add 저장소주소 서브모듈경로 • 새로운 하위모듈을 해당 경로에 추가. 추가만하고 초기화하진 않으며 커밋해시 앞에 - 기호가 나타남 • git submodule init 서브모듈경로 • 서브모듈을 초기화 • git submodule update 서브모듈경로 • 서브모듈의 변경사항을 적용 (저장소의 최신커밋을 추적하지 않음)
  • 21. 기타 명령어 • 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 저장소내에서 입력하면 루트디렉토리를 알려줌
  • 22. 참고 자료 • Git 홈페이지 (http://git-scm.com/about) • Git과 Github 안내 (http://blog.hjf.pe.kr/37) • Git 명령어 정리 (http://blog.outsider.ne.kr/572)