GUI 환경 대신 굳이 CLI를 사용하는 이유?
- GUI 프로그램은 CLI 기능 중 자주 쓰는 기능만 모아서 쓰기 편리하게 만든 것
- GUI는 Git의 모든 기능을 100% 사용할 수 없다.
→ Git을 더욱 잘 활용하기 위해 CLI 환경에서 Git을 사용해야 한다.
- GUI는 Git의 모든 기능을 100% 사용할 수 없다.
Git 용어
워킹트리(Working Tree)
: 사용자가 파일과 하위 폴더를 만들 과 작업 결과물을 저장하는 곳- 작업 디렉터리, 작업 폴더가 같은 뜻으로 사용
- 커밋을 체크아웃하면 생성되는 파일과 디렉터리(공식문서)
- 작업 폴더에서 [. git] 폴더(로컬저장소)를 뺀 나머지 부분
- 작업 폴더 : 워킹트리 + 로컬저장소
로컬 저장소
: [. git] 폴더- 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장
- 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장
원격 저장소
: 로컬 저장소를 업로드하는 곳(GitHub)Git 저장소
: Git 명령으로 관리할 수 있는 폴더 전체- 엄밀하게는 로컬저장소를 의미하지만 넓은 의미로 작업 폴더를 의미하기도 함
- 로컬저장소와 Git 저장소를 같은 뜻으로 사용(공식 문서)
Git 저장소 초기화
git init
: 현재 폴더에 Git 저장소를 생성한다.- 현재 폴더에. git이라는 숨김폴더가 생성되는데 이는 로컬저장소임을 의미한다.
Git 워킹트리 상태 확인
git status
: Git 워킹트리의 상태를 보는 명령어로 매우 자주 사용- 워킹트리가 아닌 폴더에서 실행하면 오류 발생
git status -s
: 위 명령보다 짧게 요약해서 상태를 보여주는 명령어, 변경된 파일이 많을 때 유용
옵션 설정
옵션 종류 및 우선순위
시스템 환경 옵션
: PC 전체의 사용자를 위한 옵션전역 옵션
: 현재 사용자를 위한 옵션 → 일반적/개인 PC에 사용지역 옵션
: 현재 Git 저장소에서만 유효한 옵션 → 공용 PC- 우선순위 : 지역옵션 > 전역 옵션 > 시스템 옵션
옵션 설정 명령어
git config --(local/global/system) <옵션명>
:지정한 (지역/전역/시스템) 옵션의 내용을 확인git config --(local/global/system) <옵션명> <새로운 값>
: 지정한 (지역/전역/시스템) 옵션의 값을 새로 설정git config --(local/global/system) --unset <옵션명>
: 지정한 (지역/전역/시스템) 옵션을 삭제git config --list
: 현재 프로젝트의 모든 옵션을 확인
기본 CLI 명령어
add
git add 파일 1 파일 2..
: 파일들을 스테이지에 추가- 새로 생성한 파일들은 무조건 add 명령어를 사용하여 스테이지에 올려야 함
commit
git commit
: 스테이지에 있는 파일을 커밋git commit -a
: add 명령어를 생략하고 바로 커밋- 변경된 파일과 삭제된 파일은 자동으로 스테이징 되고 커밋
- untracked 파일은 커밋되지 않음
push
git push [-u] [원격저장소별명] [브랜치이름]
: 현재 새로 생성한 커밋들을 원격저장소에 업로드- u 옵션 : 브랜치의 업스트림을 등록 → 한번 등록 후에는 git push만 입력해도 됨
pull
git pull
: 원격저장소의 변경사항을 워킹트리에 반영(fetch + merge)
fetch
git fetch [원격저장소별명] [브랜치이름]
: 원격저장소의 브랜치와 커밋들을 로컬저장소와 동기화- 옵션을 생략하면 모든 원격저장소에 소 모든 브랜치를 가져옴
merge
git merge 브랜치이름
: 지정한 브랜치의 커밋들을 현재 브랜치 및 워킹트리에 반영
스테이징 취소하기
git reset [파일명]
: 스테이지 영역에 있는 파일들을 스테이지에 내린다. (언스테이징)- 워킹트리의 내용은 변경되지 않음
- 옵션 생략할 경우 : 스테이지의 모든 변경사항을 초기화
- 스테이지에서 내릴 때 가장 많이 사용하는 명령어
- 리셋 모드 옵션을 안 주면 mixed reset
CLI로 커밋 log 살펴보기
git log
: 현재 브랜치의 커밋 이력을 보는 명령어git log -n <숫자>
: 전체 커밋 중 최신 n개의 커밋만 살펴봄--online
: 커밋 메시지를 한 줄로 요약해서 보여줌. 생략하면 커밋 정보 자세히 표시--graph
: 커밋 옆에 브랜치의 흐름을 그래프로 보여줌(GUI와 비슷)--decorate
: 브랜치와 태그 등의 참조를 간결히 표시--all
: 옵션이 없는 경우 HEAD와 관계없는 옵션은 보여주지 않음.
SHA1 해시 체크섬
- Git 커밋은 일반적으로 커밋 아이디인 영문 소문자와 숫자 조합의 40자리 SHA1 해시 체크섬 값을 가짐
- 전 세계에서 하나뿐인 고유한 값
- 이 값을 통해 Git은 커밋 객체를 구별할 수 있고, 오류 없이 안전하게 저장되어 있는지 판단 가능
- 실제로 위 사진의 노란색과 같이 앞의 7자리만 보여줌
원격저장소 관련 명령어
remote
git remote add <원격저장소 이름> <원격저장소 주소>
: 원격저장소를 등록- 원격저장소는 여러 개 등록 가능하지만 같은 별명의 원격저장소는 중복 불가
- 원격저장소는 여러 개 등록 가능하지만 같은 별명의 원격저장소는 중복 불가
git remote -v
: 원격저장소 목록을 확인- 원격저장소 등록 후
--set-upstream
또는 push-u
옵션으로 해당 원격저장소의 master 브랜치를
로컬저장소의 master 브랜치의 업스트림으로 지정해줘야 함
- HEAD, 로컬저장소의 master, 원격저장소의 master이 모두 같은 커밋을 가리키게 됨
clone
git clone <저장소 주소> [새로운 폴더명]
: 저장소 주소에서 프로젝트를 복제- 저장소 주소가 꼭 원격일 필요 없음 → 로컬저장소의 주소를 복제해도 됨
- 새로 생길 폴더명을 생략할 시, 프로젝트 이름과 같은 이름의 폴더가 새로 생성
- 이미 같은 이름의 폴더명이 존재할 시 clone에 실패