git init
과 git add
그리고 git commit
에 대해 알아보자.git init은 initialize의 줄임말로 git을 사용하겠다는 명령을 내린다. 그리고 실제적으로 .git이라는 숨김 파일이 생성된다.
가상의 상황을 가정해보자. my_project라는 디렉토리를 생성했고, 그 디렉토리 안으로 들어간다.
$ cd /Users/khm/my_project
$ git init
$ ls -al
ls -al
명령어를 입력해서 숨김 파일까지 확인해보자. .git 디렉토리가 생성되었다. git init
을 사용해도 어떠한 버전관리도 시작되지 않는다. git을 사용할 준비만 마친 상황이다.
버전 관리를 시작하기 위해선 관리할 파일이나 폴더가 있어야 한다.
readme.md 파일을 만들어보자.readme.md 파일을 만들었고, 내용은 git test로 임의로 입력했다. 그 후 gst
혹은 git status
명령어로 현재의 git의 상태를 확인할 수 있다.
$ vi readme.md
$ gst
$ git status
신기하게 새로 생긴 파일을 git이 파악하고 있다. untracked file은 아직 추적이 시작되지 않은 파일로 우선 staging area에 올릴 필요가 있다. staging area에 추가한 파일만 commit을 진행할 수 있다. commit이 현재의 파일 상황을 사진을 찍어서 보관하는 거라면 add는 사진을 찍기 전 작업대에 사진을 올려놓는 일이라고 생각할 수 있겠다. git add .
명령어를 입력해보자. git add .
에서 .
은 모든 파일을 staging area에 add하겠다는 의미다. git add readme.md로 직접 해당 파일을 add할 수도 있다. 다시 gst
를 확인해보자.
git이 수정된 파일을 staging area에 올렸다. commit할 변화를 감지했고, 여기서 터미널에 안내된 바와 같이 git rm --cached readme.md
를 입력하면 staging area에서 해당파일을 제거한다.(물론, staging area에서만 제거하지 실제 파일이 삭제되지 않는다.)
이제 사진을 찍을 시간이 왔다. git commit -m '[commit message]'
를 입력해서 현재의 상태를 저장하자.
$ git commit -m 'ADD: readme.me 추가'
커밋이 완료됐다.
변화된 사항이 없기 때문에 더 이상 추적할 파일이 없다.
$ git log
git log
를 찍어보니 커밋이 정상적으로 완료됐다. 우리는 언제든지 위의 시점과 같은 파일 상태로 이동할 수 있게 됐다.
빠르게 지금의 상태를 변경해보자. 같은 파일이지만 내용을 수정했고 커밋을 진행했다.
log를 찍어본다.
이동을 원하는 시점의 커밋 아이디(앞 7자리)를 복사한 뒤 checkout명령어를 실행해서 해당 시점의 커밋으로 돌아간다.
$ git checkout 4f50f8c
readme.md를 확인해본 결과, modified는 사라졌고 초기에 작성한 git test만 남아있다. 신기하다..
여기서 다시 최신 커밋으로 돌아갈 수도 있다.
$ git checkout -