-
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.4 부록 C: Git 명령어 - Branch와 Merge
Branch와 Merge
여기서 소개하는 명령어만 알면 Branch를 사용하고 Merge 하는 일은 능히 할 수 있다.
git branch
git branch
명령은 브랜치를 관리하는 도구다.
이 명령은 브랜치를 모두 보여주고 브랜치를 새로 만들고 브랜치를 삭제하고 브랜치 이름을 변경한다.
Git 브랜치에서 branch
명령을 설명하는데 이 명령을 한 장에 걸쳐서 설명한다.
브랜치를 만드는 것은 새 브랜치 생성하기에서 설명하고 브랜치를 보여주거나 삭제하는 기능은 브랜치 관리에서 설명한다.
git branch -u
명령으로 트래킹 브랜치를 만드는 것을 브랜치 추적에서 보여준다.
내부적으로 어떤 일이 벌어지는지는 Git Refs에서 설명한다.
git checkout
git checkout
명령은 브랜치를 변경하고 해당 파일을 워킹 디렉토리로 복사한다.
브랜치 이동하기에서 git branch
명령을 설명하면서 이 명령도 설명한다.
브랜치 추적에서 --track
옵션을 주고 트래킹 브랜치를 만드는 방법을 설명한다.
충돌 파일 Checkout를 통해 이 명령에 --conflict=diff3
을 주면 충돌 표시된 파일을 재현할 수 있다.
git reset
명령과 관련된 내용은 Reset 명확히 알고 가기에서 설명한다.
마지막으로 git checkout
이 어떻게 구현됐는지는 HEAD를 참고한다.
git merge
git merge
는 다른 브랜치를 현재 Checkout된 브랜치에 Merge 하는 명령이다.
Merge 하고 나서 현재 브랜치가 Merge 된 결과를 가리키도록 옮긴다.
git merge
명령은 브랜치의 기초에서 설명한다.
이 책의 여러 곳에서 merge
명령을 사용하지만 브랜치의 기초에서 설명한 것에서 크게 벗어나지 않는다. git merge <branch>
명령을 실행하면 해당 브랜치가 Merge 된다.
공개 프로젝트 Fork의 끝 부분에서 Squash 해서 Merge 하는 방법도 설명한다. Merge 하는 브랜치의 히스토리는 무시하고 새 커밋을 하나 만들어 Merge 하는 방법이다.
고급 Merge에서는 -Xignore-space-change
옵션을 사용하는 방법이나 --abort
플래그로 Merge를 중단하는 방법 등을 설명한다.
Merge 하기 전에 서명을 검사하는 방법도 설명한다. GPG 서명은 커밋에 서명하기에서 설명한다.
마지막으로 Subtree를 Merge 하는 것은 서브트리 Merge에서 배운다.
git mergetool
git mergetool
명령은 외부 Merge Helper를 실행해 준다. Merge 하다가 문제가 생겼을 때 사용한다.
충돌의 기초에서 살짝 맛을 보여주고 다른 Merge, Diff 도구 사용하기에서 자신의 외부 Merge 도구를 설정하는 방법을 설명한다.
git log
git log
명령은 프로젝트 히스토리를 시간의 역순으로 보여준다.
넘겨준 Ref를 따라 히스토리를 보여주는데 Ref를 한 개가 아니라 여러 개 넘길 수도 있다. Ref를 넘겨 주지 않으면 HEAD가 가리키는 브랜치의 히스토리를 보여준다.
또 이 명령으로 여러 브랜치들 사이의 차이를 커밋 단위로 볼 수 있다.
이 책에서 프로젝트 히스트리를 보여줄 때마다 이 명령을 사용한다고 봐도 된다.
커밋 히스토리 조회하기에서 이 명령을 깊게 다뤘다.
-p
와 --stat
옵션을 주면 각 커밋 사이에 생긴 변화를 확인할 수 있다. --pretty
와 --oneline
옵션을 주면 히스토리를 좀 더 깔끔하게 볼 수 있다. 이 옵션은 Author나 날짜를 중심으로 히스토리를 보여준다.
새 브랜치 생성하기을 보면 --decorate
옵션을 주고 히스토리에 브랜치 포인터가 함께 보이도록 하는 방법이 나온다. --graph
옵션을 추가하면 히스토리가 어떻게 진행됐는지도 볼 수 있다.
비공개 소규모 팀과 범위로 커밋 가리키기에서 branchA..branchB
문법을 사용하는 방법을 설명한다. branchB
에만 있고 branchA
에는 없는 커밋만 걸러서 볼 수 있다.
범위로 커밋 가리키기에서 이 문법을 다양하게 조합하는 방법을 설명한다.
In Merge 로그와 Triple Dot에서 branchA…branchB
포맷을 사용하는 방법을 설명한다. 이 문법은 둘 중 한쪽에 속한 커밋만 보여준다. --left-right
옵션을 주면 각각 어느 쪽에 속한 것인지도 보여준다.
Merge 로그에서는 충돌을 해결할 때 유용한 --merge
옵션도 설명한다. --cc
옵션을 사용하면 충돌을 히스토리에 보여준다.
-g
옵션을 사용하면 브랜치를 오간 기록인 Reflog도 함께 보여준다. 이것은 RefLog로 가리키기에서 설명한다.
검색에서는 -S
와 -L
옵션을 소개한다. 이 옵션을 사용하면 특정 코드에 대한 히스토리만 찾아볼 수 있다. 특정 함수의 히스토리를 보고 싶을 때 사용하면 유용하다.
커밋에 서명하기에서 --show-signature
옵션을 사용하는 방법을 설명한다. git log
명령에 이 옵션을 사용하면 커밋의 서명 정보까지도 보여준다.
git tag
git tag
명령은 히스토리에서 특정부분을 북마크하는 기능이다.
일반적으로 배포할 때 사용한다.
이 명령은 태그에서 자세히 설명하고 릴리즈 버전에 태그 달기에 보면 구체적인 사례도 보여준다.
태그에 GPG 서명을 하려면 -s
플래그를 주면 되고 -v
플래그를 주면 서명을 검증할 수 있다. 내 작업에 서명하기에서 다룬다.