Git
Git 을 사용하기 위한 명령어
깃이 무엇이냐
- 버전 관리
- 파일 변화를 기록했다가 특정 시점의 버전을 꺼내 사용하는 시스템이다.
- 백업, 저장
- 수정 사항을 이전 상태로 되돌리거나 수정 내용을 비교할 수 있다.
- 협업
- 누가 수정을 했는지, 어디서 문제가 발생했는지 추적할 수 있다.
시작하기
깃을 사용하기 위해서 깃 저장소를 만들어야 한다.
git init
해당 디렉터리에 깃 저장소를 생성한다.
.gitignore
node_modules 등의 깃으로 관리하지 않는 파일들을 .gitignore 파일에 작성해 무시하도록 한다.
상태 관리
수정 사항이 있는 파일에 번호를 붙여 버전으로 구별한다.
- 작업 저장소(working directory) : 파일에서 작업을 하는 장소
- 스테이지(staging area) : 버전으로 만들기 위해 수정 사항이 있는 파일들을 올려 대기시키는 장소
- 깃 저장소(git directory - repository) : 스테이지의 파일들을 버전으로 만들어 저장하는 장소.

git add <file>
변경 사항이 잇는 파일을 스테이지로 옮긴다.
git reset <file>
add를 취소하고 파일을 작업 저장소로 복구시킨다.
파일 상태
깃으로 관리하는 파일에는 4가지의 상태가 있다.
- Untracked : 파일이 새로 생성되어 깃이 인식하지 못하는 상태
- Unmodified : 파일의 변경사항이 모두 커밋을 통해 저장된 상태
- Modified : 파일을 수정하여 변경 사항을 인식한 상태
- Staged : 파일의 변경 사항을 저장하기 위해 스테이지에 올려놓은 상태 (
git add)

git status
Untracked, Modified, Staged 파일들을 확인할 수 있다.
변경사항이 없는 Unmodified 파일은 뜨지 않는다.
커밋 - Commit
커밋은 변경 사항을 깃 저장소에 기록해 저장하고 복구하는 단위가 된다.
변화하는 내용만 시간 순서대로 관리한다.
어떤 변경사항이 있는지 확인할 수 있도록 커밋할 때 간단한 메시지로 기록한다.
git commit -m 'message'
스테이지에 있는 모든 파일을 깃 저장소로 커밋한다.
git log
모든 커밋에 대한 정보를 확인할 수 있다. (commit hash 확인가능)
git log --graph: 커밋 상태를 그래프로 보여준다.git log --stat: 커밋에 포함된 파일들을 보여준다.
작업 되돌리기
git restore
작업중 변경 사항과 스테이징 영역의 파일을 되돌릴 수 있다.
git restore <file>: 파일의 변경사항을 마지막 커밋 상태로 되돌린다.git restore --staged <file>: 스테이징 영역의 파일을 취소시킨다. (reset과 동일)
git reset
커밋을 취소하고 이전의 버전으로 돌아갈 수 있다.
돌아가려는 버전과 현재 버전 사이의 모든 커밋이 제거되고 변경사항만 남긴다.
- (옵션이 없으면 스테이징 영역의 파일을 취소시킨다.)
git reset HEAD^: 한 단계 이전 버전으로 돌아감git reset HEAD~<amount>: 현재 버전부터 원하는 갯수만큼의 커밋을 취소함git reset <commit hash>: 원하는 버전으로 돌아감git reset --hard <commit hash>: 변경사항을 남기지 않고 전부 되돌리기 위해 사용한다.
git revert
특정 버전의 커밋과 변경사항을 지우는 revert커밋을 올린다.
git revert HEAD: 바로 직전의 버전을 제거git revert <commit hash>: 원하는 버전을 제거
git checkout
현재 커밋에서 다른 커밋으로 단순히 이동할 수 있다.
커밋의 포인터인 HEAD를 특정 커밋으로 이동시킨다.
git checkout HEAD^: 한 단계 이전 버전으로 돌아감git checkout HEAD~<amount>: 현재 버전부터 원하는 갯수만큼의 커밋을 취소함git checkout <commit hash>: 원하는 버전으로 돌아감
브랜치 - Branch
코드를 분기해 원래 코드와 독립적으로 개발하기 위해 사용한다.
협업 과정에서 다른 개발자의 코드와 직접적인 충돌이 나지 않게 하고, 배포된 코드와 개발중인 코드를 분리한다.
git branch
브랜치를 확인하고 관리한다.
git branch -a: 리모트 브랜치를 포함한 모든 브랜치를 확인git branch <branch>: 브랜치 생성git branch -d <branch>: 브랜치 삭제
git switch
브랜치를 이동한다.
git switch <branch>: 특정 브랜치로 이동git switch -c <branch>: 브랜치를 생성하고 이동
checkout명령어도switch와 동일하게 브랜치를 이동할 수 있다.
git checkout <branch>: 브랜치를 이동한다.-
git checkout -b <branch>: 브랜치를 만들고 바로 이동한다. git log --branches: 커밋 로그와 브랜치를 함깨 확인한다.
병합 - Merge
git merge <branch name>
특정 브랜치를 현위치의 브랜치로 병합한다.
- ‘develop’ 브랜치의 작업을 ‘main’ 에 병합하려면 ‘main’ 브랜치로 이동해
merge를 사용한다. - 병합 과정에서는 브랜치의 변경 부분이 충돌하는 경우가 발생할 수 있다.
- 해당 파일을 열어 충돌한 코드와 마커 태그를 수정하고 다시 커밋해야 한다.
원격 저장소 - Remote
깃 저장소는 로컬 저장소와 원격 저장소가 있다.
Github와 같은 서버의 원격 저장소와 연결해서 백업과 협업을 한다.
git clone <remote url>
로컬 저장소가 없는 상태에서 원격 저장소를 복사해온다.
git remote
git remote add origin <remote url>: 원격 저장소와 연결-
git remote -v: 원격 저장소 연결 여부 확인 git checkout -t <remote>/<branch>: 원격 저장소의 브랜치를 내려받아 이동한다.- 로컬 저장소에 같은 이름의 브랜치가 있으면 충돌이 발생한다.
git push
로컬 저장소의 내용을 원격 저장소에 올린다.
git push -u origin main: 원격 저장소에 로컬 저장소의 새로운 브랜치를 올림
git fetch
원격 저장소의 변경사항을 내려받는다.
git pull
원격 저장소의 내용을 로컬 저장소로 내려받아 병합한다. (fetch + merge)
