개발자라면 필수적으로 알아야할 Git(버전 관리 시스템) 개념 및 명령어 정리
GIT
- VCS(Version Control System) - 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템
- 각 파일을 이전 상태로 되돌리기
- 프로젝트를 이전 상태로 되돌리기
- 시간에 따라 수정 내용 비교
- 누가 문제를 일으켰는지 추적
- 파일을 잃어버렸거나 잘못 수정했을 때 쉽게 복구가능
3가지 상태
- Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미
- Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것
- Staged란 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미
3가지 단계
- .git directory : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
- working tree : 프로젝트의 특정 버전을 Checkout 한 것
- Staging Area (Index) : 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장
Window에서 리눅스 환경으로 실습하기 위해 ubuntu를 설치
git 설치
apt-get install git
git 버전 확인
git --version
사용자 정보 설정
$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]
편집기 설정 (32bit NotePad 기준)
$ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession"
설정 확인
git config --list
도움말 보기
git help <verb>
man git-<verb>
git help config
각 명령에서 사용할 수 있는 옵션들 확인 (간략 -h, 자세히 -help)
git add -h
git add -help
git 저장소 만들기
git init
기존 저장소를 clone 하기
git clone https://github.com/libgit2/libgit2
파일의 상태 확인하기
git status
파일의 상태를 간략하게 확인하기
git status -s
파일을 새로 추적하기 (README.md 파일 생성 후)
echo "test" > README.md
git add README.md
파일 무시하기 (gitignore)
# 확장자가 .a인 파일 무시
*.a
# 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음
!lib.a
# 현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음
/TODO
# build/ 디렉토리에 있는 모든 파일은 무시
build/
# doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음
doc/*.txt
# doc 디렉토리 아래의 모든 .pdf 파일을 무시
doc/**/*.pdf
수정했지만 아직 staged 상태가 아닌 파일 비교
git diff
커밋하기
git commit -m "메시지 첨부"
git commit -a //git add를 생략할 수 있음
파일 삭제하기(stageing area, working directory에서 삭제)
git rm README.md
파일 이름 변경하기
git mv README.md README
커밋 히스토리 조회하기
git log -p // 각 커밋의 diff 결과 출력
git log --stat // 각 커밋의 통계정보 출력
git log --pretty=oneline // 기본형식 이외에 다른 형식으로 볼 수 있음
git log --pretty=format:"%h - %an, %ar : %s"
git log --graph // 아스키 그래프를 출력
되돌리기 (완료한 커밋을 수정해야 할 때)
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
Modified 파일 되돌리기
git checkout -- CONTRIBUTING.md
리모트 저장소 확인하기 (v까지 줘야 단축이름과 URL까지 모두 확인 가능)
git remote -v
리모트 저장소 추가하기
git remote add pb https://github.com/paulboone/ticgit
리모트 저장소에서 데이터 가져오기
git fetch <remote>
리모트 저장소에 push 하기
git push origin master
리모트 저장소 살펴보기
git remote show origin
리모트 저장소 이름 변경
git remote rename pb paul
리모트 저장소 삭제
git remote remove paul