1. VCS(Version Control System)란
: 버전관리(Version Control System,VCS)란 소스 코드를 관리하는 시스템이나 툴
2. 버전 관리 툴
- Git
- Git-based
-GitHub
-Gitlab
-BitBucket
- SVN
- Mercurial
- Dimensions CM
- Perforce
- Bazaar
- CVS
3. git 기초 명령어
- init: 깃 저장소 초기화.
- config: "configure"의 준말, 처음에 깃을 설정할 때 사용.
- help: 명령어 도움말. 좀 더 자세하게 "git help init"이나 다른 용어를 타이핑하여 특정 깃 명령어를 사용하고 설정하는 법을 이해할 수도 있다.
- status: 저장소 상태를 체크. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등을 볼 수 있다.
- clone: 원격 저장소 복사.
- add: 이 명령이 저장소에 새 파일들을 추가 하지는 않는다. 대신, 깃이 새 파일들을 지켜보게 한다. 파일을 추가하면, 깃의 저장소 "스냅샷"에 포함된다.
- commit: 깃의 가장 중요한 명령어. 어떤 변경사항이라도 만든 후, 저장소의 "스냅샷"을 찍기 위해 이것을 입력한다. 보통 "git commit -m < Message >"형식으로 사용한다. -m 은 명령어의 그 다음 부분을 메시지로 읽어야 한다는 것을 말한다.
- branch: 이 명령어는 새로운 브랜치를 만들고, 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 만든다. 새 브랜치를 "cats"로 부르고 싶으면, git branch cats를 타이핑한다.
- checkout: 체크하길 원하는 저장소로 옮겨가게 해주는 탐색 명령이다. master 브랜치를 들여다보고 싶으면, git checkout master를 사용할 수 있고, git checkout cats로 또 다른 브랜치를 들여다볼 수 있다.
- merge: 브랜치에서 작업을 끝내고, 모든 협업자가 볼 수 있는 master 브랜치로 병합할 수 있다. git merge cats는 "cats"브랜치에서 만든 모든 변경사항을 master로 추가한다.
- push: 로컬 컴퓨터에서 작업하고 당신의 커밋을 깃허브에서 온라인으로도 볼 수 있기를 원한다면, 이 명령어로 깃허브에 변경사항을 push한다.
- pull: 로컬 컴퓨터에서 작업할 때, 작업하고 있는 저장소의 최신 버전을 원하면, 이 명령어로 깃허브로부터 변경사항을 다운로드한다("pull").
4. git 주요 기능 정리
가. 파일의 내용 되돌리기
- 특정 파일의 내용을 마지막 커밋으로 돌리고 싶다면 해당 파일 선택 후 "discard hunk"
나. 브랜치(branch) 변경하기
- branch: 기존 내용을 유지한 체 새로운 내용을 추가하고 싶을 때 사용한다.
- checkout: 특정 브랜치(혹은 커밋)으로 돌아가고 싶을 때 사용.
다. 병합하기(merge)
1) HEAD브랜치 변경사항 없고, 병합 대상 브랜치가 HEAD로부터 시작된 경우
- 아주 쉽게 병합 가능(fast-forward)
2) 가지가 생겨난 경우
- 원인이 될수있는 몇가지 경우
- 과거의 커밋으로부터 브랜치를 생성해서 작업을 한 경우
- 새로운 브랜치 작업 이후에 헤드에 다른 새 커밋이 있는 경우
- 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우
- 충돌 발생 가능성 높음
라. 충돌(conflict) 해결하기
- 가장 중요한 것: 겁내지 말기!!!
- 같은 파일을 병합 대상 두 커밋에서 동시 수정했을 경우 충돌이 날 확률 높다.
- SourceTree 사용한 충돌 해결 방법
- Resolve using "Mine"
- Resolve using "Their"
- 두 파일 내용 모두 반영하고 싶은 경우에는 IDE에서 편집후 커밋
마. 커밋 되돌리기
1) reset 사용하기(비추..)
- 장점: 쉬움
- 단점
- 커밋이 날라간다
- push --force 필요할 수 있다
2) branch 만들어서 되돌리기
- 장점: 커밋 내용 사라지지 않는다.
- 단점: 트리가 지저분해진다.
3) revert
- 장점: 가장 정석적(커밋 내용 사라지지 않는다.)
- 단점: 충돌이 날 수 있다.
- 주의사항: 현재 선택한 커밋의 내용을 되돌린다.
- revert로 여러 커밋을 되돌리려면 최신 커밋부터 순서대로 revert
바. 작업중인 내용 임시저장
1) branch생성 및 커밋 덮어쓰기
- 브랜치1에서 일단 (임시) 커밋을 한다.
- 브랜치2로 체크아웃하여 할 일을 한다.
- 다시 브랜치1로 되돌아와서 하던 작업을 계속 한다.
- 커밋 덮어쓰기(commit --amend)를 한다.
- (옵션) 필요하다면 (push --force)를 한다.
2) stash
- 다른 브랜치로 체크아웃하기 전에 현재 작업내용을 저장하는 임시 저장소
- 유용하다!
사. rebase
- merge처럼 두 브랜치를 합칠 때 사용
- 현재 브랜치가 대상 브랜치 위로 올라간다.
- 위험하니 조심스레 사용(tree가 깔끔해져서 남용하는 경우가 있음..)