-
1. 시작하기
-
2. Git의 기초
- 2.1 Git 저장소 만들기
- 2.2 수정하고 저장소에 저장하기
- 2.3 커밋 히스토리 조회하기
- 2.4 되돌리기
- 2.5 리모트 저장소
- 2.6 태그
- 2.7 Git Alias
- 2.8 요약
-
3. Git 브랜치
-
4. Git 서버
- 4.1 프로토콜
- 4.2 서버에 Git 설치하기
- 4.3 SSH 공개키 만들기
- 4.4 서버 설정하기
- 4.5 Git 데몬
- 4.6 스마트 HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 또 다른 선택지, 호스팅
- 4.10 요약
-
5. 분산 환경에서의 Git
- 5.1 분산 환경에서의 워크플로
- 5.2 프로젝트에 기여하기
- 5.3 프로젝트 관리하기
- 5.4 요약
-
6. GitHub
- 6.1 계정 만들고 설정하기
- 6.2 GitHub 프로젝트에 기여하기
- 6.3 GitHub 프로젝트 관리하기
- 6.4 Organization 관리하기
- 6.5 GitHub 스크립팅
- 6.6 요약
-
7. Git 도구
- 7.1 리비전 조회하기
- 7.2 대화형 명령
- 7.3 Stashing과 Cleaning
- 7.4 내 작업에 서명하기
- 7.5 검색
- 7.6 히스토리 단장하기
- 7.7 Reset 명확히 알고 가기
- 7.8 고급 Merge
- 7.9 Rerere
- 7.10 Git으로 버그 찾기
- 7.11 서브모듈
- 7.12 Bundle
- 7.13 Replace
- 7.14 Credential 저장소
- 7.15 요약
-
8. Git맞춤
- 8.1 Git 설정하기
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 정책 구현하기
- 8.5 요약
-
9. Git과 여타 버전 관리 시스템
- 9.1 Git: 범용 Client
- 9.2 Git으로 옮기기
- 9.3 요약
-
10. Git의 내부
- 10.1 Plumbing 명령과 Porcelain 명령
- 10.2 Git 개체
- 10.3 Git Refs
- 10.4 Packfile
- 10.5 Refspec
- 10.6 데이터 전송 프로토콜
- 10.7 운영 및 데이터 복구
- 10.8 환경변수
- 10.9 요약
-
A1. 부록 A: 다양한 환경에서 Git 사용하기
- A1.1 GUI
- A1.2 Visual Studio
- A1.3 Eclipse
- A1.4 Bash
- A1.5 Zsh
- A1.6 Git in Powershell
- A1.7 요약
-
A2. 부록 B: 애플리케이션에 Git 넣기
-
A3. 부록 C: Git 명령어
- A3.1 설치와 설정
- A3.2 프로젝트 가져오기와 생성하기
- A3.3 스냅샷 다루기
- A3.4 Branch와 Merge
- A3.5 공유하고 업데이트하기
- A3.6 보기와 비교
- A3.7 Debugging
- A3.8 Patch 하기
- A3.9 Email
- A3.10 다른 버전 관리 시스템
- A3.11 관리
- A3.12 Plumbing 명령어
A3.3 부록 C: Git 명령어 - 스냅샷 다루기
스냅샷 다루기
Stage 하고 커밋하는 정도의 아주 기본적인 워크플로는 명령어 몇 개만 알면 된다.
git add
git add
명령은 워킹 디렉토리에서 Staging Area(“index”)로 컨텐트를 추가하는 명령어다.
git commit
명령은 오로지 Staging Area만 바라보기 때문에 git add
명령으로 커밋할 스냅샷을 잘 다듬어야 한다.
이 명령은 매우 중요한 명령어라서 이 책에서 수십 번도 더 언급한다. 여기서 어떻게 사용하는지 잘 설명한 곳을 찾아보자.
git add
는 파일을 새로 추적하기에서 자세히 설명한다.
이 명령는 충돌 시에도 필요하다. 충돌의 기초에서 어떻게 사용하는지 설명한다.
대화형 명령에서 수정한 파일 일부분을 대화형으로 Stage 하는 방법을 보여준다.
마지막으로 이 명령이 내부적으로 어떻게 동작하는지 이해할 수 있도록 Tree 개체에서 저수준 명령어로 따라 하는 예를 보여준다.
git status
git status
명령은 워킹 디렉토리와 Staging Aread의 상태를 보여준다.
Modified 상태이거나 Unstaged 상태인 파일이 무엇인지 Staged 상태이지만 아직 커밋하지 않은 파일은 무엇인지 보여준다.
Staging Area에 파일을 넣고 꺼내는 방법에 대한 힌트도 보여준다.
git status
명령은 파일의 상태 확인하기에서 간결하게 설명한다.
이 명령은 이 책에서 아주 많이 사용했지만 여기 설명을 벗어나지 않는다.
git diff
git diff
명령은 두 트리 개체의 차이를 보고 싶을 때 사용한다. 워킹 디렉토리와 Staging Area를 비교할 수 있고(git diff
) Staing Area와 마지막 커밋을 비교할 수 있다(git diff --staged
). 그리고 두 커밋을 비교할 수 있다(git diff master branchB
).
git diff
는 Staged와 Unstaged 상태의 변경 내용을 보기에서 처음 설명한다. Staged 상태인 내용이 무엇이고 반대 상태인 내용은 무엇인지 비교하는 법을 설명한다.
커밋 가이드라인에서 --check
옵션으로 공백문자가 잘못 입력되지 않았는지 확인하는 방법을 소개한다.
무슨 내용인지 확인하기에서 두 브랜치를 효율적으로 비교할 수 있는 git diff A…B
문법을 설명한다.
고급 Merge을 보면 -b
옵션으로 공백문자는 무시하고 비교하는 것과 --theirs
, --ours
, --base
옵션으로 충돌 난 파일의 상태를 비교하는 방법이 나와 있다.
마지막으로 서브모듈 시작하기에서 서브모듈의 변경 내용을 비교하는 --submodule
옵션도 설명한다.
git difftool
git difftool
명령은 단순히 외부 diff 도구를 실행해준다. git diff
는 Git에 들어 있는 기능을 사용하는 것이고 외부 diff 도구로 두 트리를 비교하고 싶을 때 사용한다.
이 명령은 Staged와 Unstaged 상태의 변경 내용을 보기에서 설명한다.
git commit
git commit
명령은 git add
로 Staging Area에 넣은 모든 파일을 커밋한다. 데이터베이스에는 하나의 스냅샷으로 기록된다. 그리고 현 브랜치가 새 커밋을 가리키게 한다.
커밋에 대한 기본적인 내용은 변경사항 커밋하기에서 다룬다.
-a
플래그를 주고 git add
를 건너뛰고 바로 커밋하는 것과 -m
으로 커밋 메시지를 파라미터로 넘기는 방법도 보여준다.
가장 최근 커밋을 수정하는 --amend
옵션은 되돌리기에서 설명한다.
브랜치란 무엇인가을 보면 git commit
이 무엇을 하는지 왜 그렇게 하는지 설명한다.
-S
플래그로 커밋에 서명하는 방법은 커밋에 서명하기에서 설명한다.
마지막으로 커밋 개체에서 git commit
명령이 내부적으로 하는 일이 무엇이고 실제로 어떻게 구현돼 있는지 설명한다.
git reset
git reset
명령은 되돌리는(Undo) 명령이다. 단어가 의미하는 그대로라고 생각하면 된다.
HEAD
포인터를 옮기는 것과 관련돼 있고 Staging Area(index
)를 되돌릴 수 있고 --hard
옵션을 주면 워킹 디렉토리도 되돌린다.
--hard
옵션을 잘못 사용하면 작업물을 잃어버릴 수도 있기 때문에 이 명령을 잘 이해하고 있어야 한다.
git reset
은 무엇보다도 git add
로 추가한 파일을 Unstage 하는데 사용한다. 파일 상태를 Unstage로 변경하기에서 설명한다.
Reset 명확히 알고 가기에서 이 명령을 전체적으로 자세히 설명한다.
git reset --hard
명령으로 충돌 시 Merge를 취소할 수 있다. git merge --abort
로도 같은 일을 할 수 있는데 이 명령은 git reset
명령어의 Wrapper다. 이 내용은 Merge 취소하기에서 설명한다.
git rm
git rm
명령은 Staging Area나 워킹 디렉토리에 있는 파일을 삭제하는 데 사용한다.
git add
명령과 비슷하게 파일의 삭제를 Stage 하는 기능이다.
파일 삭제하기에서 git rm
명령을 자세히 설명한다. Staging Area와 워킹 디렉토리 모두에서 파일을 삭제하는 방법과 --cached
옵션을 주고 Staging Area에 있는 파일만 지우고 워킹 디렉토리의 파일은 남겨두는 방법도 설명한다.
대부분은 개체 삭제에서 설명한 대로 쓰지만, 이 책에서는 다르게 사용한 예도 있다. git filter-branch
명령을 실행할 때 git rm
명령에 --ignore-unmatch
옵션을 주고 사용한다. 이 옵션은 삭제하려는 파일이 없을 때 에러가 나지 않게 해준다.
스크립트를 작성할 때는 유용하다.
git mv
git mv
명령은 파일을 옮기고(이름을 변경하고) 나서 새 파일에 git add
명령을 실행하고 이전 파일에는 git rm
을 실행시켜주는 명령이다.
이 명령은 파일 이름 변경하기에서 다룬다.
git clean
git clean
명령은 워킹 디렉토리에서 필요없는 파일을 삭제하는 명령이다.
이 명령으로 충돌로 생긴 파일이나 빌드 아티팩트 파일을 삭제할 때 편리하다.
이 명령을 사용하는 상황과 필요한 옵션은 워킹 디렉토리 청소하기에서 다룬다.