이전 포스팅에서 간략하게 설명했듯이, commit은 현재까지 개발한 지점을 중간저장하는 것이다. 처음 프로젝트 뼈대를 만들었을 때, 하나의 기능을 개발했을 때, 버그를 수정했을 때, 리드미를 수정했을 때 등 특정한 지점들을 commit을 생성하여 기록한다. commit을 의미있게 남김으로써 작업 진행 상황을 쉽게 파악할 수 있다.
예시로 우아한테크코스 프리코스 중 1주차 과제인 숫자 야구 게임의 리팩토링 커밋 이력을 가져왔다. 커밋 메시지를 간단하지만 다른 개발자도 쉽게 이해할 수 있도록 작성함으로써 코드를 직접 파악해야하는 수고를 덜 수 있다.
commit할 파일 또는 폴더를 선택한다. 본인이 3개의 파일을 수정하였더라도 현재 기록하고 싶은 커밋 내용이 포함되지 않는 파일은 제외하여 커밋할 수 있다.
addTest.txt 파일을 생성하고 git status
로 확인해보니 변경사항이 없는 init.txt 는 add 목록에 없으며 새로 생성된 addTest.txt 파일만 올라왔다. git add 파일 또는 폴더명
으로 커밋할 파일들을 선택한다.
git fork에서는 좌측 상단에 Local Changes
를 누르면 변경된 파일 목록을 확인할 수 있다. Unstaged에 있는 파일들은 add 되지 않은 파일들이며 Staged에 있는 파일들은 add 된 파일들이다.
프로젝트 진행 중 기록에 남길 지점을 생성한다. 커밋을 생성하면서 어떤 것이 변경되었는지 메시지도 같이 기록할 수 있다.
git fork에서 메인화면에 commit 이력들이 기록된것들을 볼 수 있다. 분홍색 브런치는 로컬 저장소에 있는 브런치이며 연두색 브런치는 원격 저장소의 브런치이다. init한 커밋은 push하여 원격 저장소에 보냈기 때문에 init 커밋에 원격 저장소 브런치가 위치해있으며 지금 추가한 add test 커밋은 커밋만 생성했을 뿐 푸쉬를 하지 않아 원격 저장소 브런치가 위로 올라오지 않았다.
git fork에서도 커밋해보기 위해 addTest2.txt 파일을 하나 더 생성했다. 우측하단에 Commit subject
에는 커밋 제목을, Description
에는 커밋 내용을 적는다. 커밋 메시지 규칙에 관한 내용은 현재 포스팅 아래에 있으며 지금은 제목만 간단하게 적어 커밋을 생성했다.
커밋을 하나 더 생성하여 추가되었다. main 브런치에서 커밋을 생성했기 때문에 로컬 저장소의 main 브런치의 위치가 이동했으며 원격 저장소에는 push 하지 않았기 때문에 위치에는 변동이 없다.
git push 원격저장소이름 브런치이름
명령어로 생성한 두 개의 커밋을 원격 저장소로 푸쉬하였다. push는 생성한 커밋 이력과 현재 프로젝트 내용들을 원격 저장소로 보내는 역할을 한다.
깃허브에서 확인해보면 원격 저장소에 addTest.txt와 addTest2.txt가 작성한 메시지를 가진 채 추가된 것을 알 수 있다.
우측에 3 commits 를 선택하면 현재 브런치에서 생성된 커밋 이력을 확인할 수 있다.
git fork를 보면 원격 저장소의 main 브런치의 위치가 push 한 커밋 위치로 이동하였다.
git fork에서 push를 할 때에는 푸쉬할 브런치를 우측 클릭하여 Push '브런치명' to '원격 저장소명'을 선택한다. 지금까지 생성한 모든 커밋이 푸쉬된다.
commit 메시지를 남길 때 쉽게 파악할 수 있도록 규칙을 정하는 것이 좋다. 나는 우아한테크코스 프리코스에서 언급한 깃허브를 참고하였다. 대부분이 비슷한 규칙을 지정하고 있다.
여기에 포함된 모든 규칙을 사용하지는 않고 큰 틀만 사용하고 있다.
commit 메시지를 작성할 때 왜 이 커밋을 생성했는지를 나타내는 type
과 간략한 제목의 subject
, 상세한 내용의 body
를 작성한다.
위에 작성한 커밋 메시지들을 규칙에 맞게 작성하면 다음과 같다.
before
init
after
feat: init
before
add test
after
feat: add test