[Git] add 와 commit 하기
Git과 Github
git은 프로젝트의 버전 관리를 도와주는 프로그램이다.
버전 관리는 파일이나 문서의 변화를 시간순으로 기록하는 것을 의미한다.
버전 관리를 통하여 다음과 같은 장점을 얻을 수 있다.
- 지난 과정을 확인할 수 있다.
- 이전 버전으로 돌아갈 수 있다.
또한 git을 활용하여 동시에 협업을 진행할 수 있다.
Github
github는 이러한 git으로 관리한 프로젝트를 올리는 사이트이다.
원격 저장소, 외부 컴퓨터의 역할을 하여 서로 다른 사람들이 접근하여 프로젝트를 관리할 수 있게 된다.
Repository
프로젝트 디렉토리를 저장하는 장소로 프로젝트의 초기 버전부터 최근 버전까지 모두 담겨져 있다.
Repository 생성
git init
해당 명령어를 통해 비어있는 레포지토리를 생성한다.
실제록 디렉토리 안에 .git 이라는 레포지토리가 생성된다.
add와 commit 하기
코드를 수정하고 이를 프로젝트에 반영하여 하나의 버전으로 남겨두어야 한다.
이를 위해 commit 을 사용한다.
commit 은 프로젝트 디렉토리의 모습을 하나의 버전으로 저장하는 행위이며 커밋을 통하여 버전 관리를 할 수 있다.
commit 을 하기 이전에 우선 사용자의 정보를 입력해주어야 한다.
git config user.name "<사용자 이름>"
git config user.email "<이메일 주소>"
또한 add를 통해 커밋할 파일들을 미리 저장해주어야 한다.
add
커밋할 파일을 미리 저장해두는 명령어다.
add된 파일들은 staging area에 저장된다.
add 명령어 뒤 커밋에 반영할 파일들을 작성해준다.
git add <파일 이름>
만약 디렉토리를 add 할 경우, 디렉토리 하위 모든 파일들이 staging area 에 추가된다.
모든 파일들을 추가할 경우에는
git add .
온점을 작성하여 현재 프로젝트 디렉토리에서 변경된 모든 사항들을 추가해준다.
특별한 경우가 아닐 시 해당 방법으로 add를 진행하면 되겠다 .
commit
add 를 통해 파일 저장을 마쳤으면 이후 commit을 진행하면 된다.
단 커밋을 작성하며 m 옵션을 통하여 커밋 메세지도 작성해주어야 한다.
커밋 메세지를 통해서 해당 커밋을 통해 무슨 작업이 이루어졌는지를 보여 관리를 더욱 명확히 할 수 있다.
git commit -m '<커밋 메세지>'
커밋 메세지의 경우 각 프로젝트에서 작성한 커밋 컨벤션에 맞게 작성해주면 된다 !
commit 아이디 확인하기
git log
해당 커맨드를 통하여 커밋 내역을 확인할 수 있다.
이 중 commit 뒤에 적혀있는 문자열은 커밋 아이디 (커밋 해시)에 해당된다.
커밋 아이디는 커밋을 다루는 여러 커맨드에서 사용된다.
현재 커밋 내역이 많아 커밋 히스토리가 길어져 가독성이 다소 떨어진다.
git log --pretty=oneline
위 커맨드를 통하여 각 커밋 내역들을 한 줄로 줄일 수 있다.
m 옵션 없이 커밋하기
git commit
m 옵션 없이 git commit 을 입력하면 커밋 메세지를 입력하는 창이 열린다.
해당 vim 모드에서 i 를 입력하여 입력 모드로 전환 후, 맨 윗줄에 커밋 메세지를 작성한다.
이후 esc 를 누른 후 :wq 를 입력하여 저장한다.
최신 커밋 메세지 수정하기
git commit --amend
가장 최근에 작성한 커밋 메세지를 수정할 수 있다.
마찬가지로 vim 모드에서 수정이 이루어지고, 저장후 커밋 히스토리를 확인하면 커밋 아이디가 변경된 모습을 확인할 수 있다.
Git의 작업 영역
Git은 총 3가지의 작업 영역을 가진다.
- Working Directory - 작업을 하는 프로젝트 디렉토리
- Staging Area - git add 한 파일들이 존재하는 영역
커밋을 하게 되면 staging area 에 있는 파일들만 커밋에 반영된다. - Reopsitory - Working Directory 의 변경 이력들, 즉 커밋들이 저장되는 영역이다.
Working directory에서 작업한 것들을 git add를 통해 staging area에 추가하면, 해당 내용들이 commit 을 통하여
snapshot 처럼 repository (.git) 에 저장되는 방식이다.
git add 를 사용하는 이유
commit은 반드시 staging area에 존재하는 파일들에 한해 이루어진다.
만약 working directory 에서 수정을 했더라도 해당 파일을 add 하지 않은 채 commit을 진행하면 이전 버전에서의 파일이 그대로 commit 된다.
이처럼 staging area를 통해 원하는 파일들을 선별적으로 관리하여 버전을 관리할 수 있기 때문에 git add 를 사용한다 !
Git에서의 파일 상태
파일의 상태는 총 4가지로 나눌 수 있다.
- Untracked 상태
파일이 git에 의해 추적되지 않고 있는 상태로
파일을 새로 생성하고 한 번도 git add를 해주지 않은 상태이다. - Tracked 상태
Tracked 상태는 총 3가지로 구분할 수 있다.- Staged
파일의 내용이 수정되고 나서 staging area 에 올라와 있는 상태이다.
새로 생성한 파일에 git add를 해주거나, 한 번이라도 커밋에 포함됐었던 파일의 내용을 수정하고
git add 를 해준 상태이다. - Unmodified
현재 파일의 내용이 최신 커밋 모습과 비교하여 바뀐 게 없는 상태이다.
커밋을 하고 난 직후 working directory의 모든 일들이 해당 상태이다. - Modified
최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있을 경우이다.
- Staged