깔끔하게 커밋하기

흔히 말하길, 좋은 커밋이란 단 한가지 고침만을 담고 있는(atomic한) 커밋이라고 한다.

그러나 코드를 작성하다 보면 여러가지 작업이 섞이는 것을 피하기 어렵다. 리팩토링을 하다가 오타를 발견하면 고치게 되고, 버그를 잡다가 잘못된 들여쓰기를 바로잡기도 한다. atomic한 커밋을 위해 눈 앞에 뻔히 보이는 잘못을 방치하는 것도 이상하지 않은가.

몇몇 (나처럼) 깔끔한 커밋에 집착하는 사람들은 이렇게 여러가지 종류의 수정이 뒤섞인 커밋을 만드는 것을 매우 싫어한다. 다행히도 git에는 나같은 사람들을 위해서 여러가지 도구들을 마련해 두었다.

git add --interactive

index에 add를 할 때, 특정 hunk만 선택해서 add할 수 있게 해준다. 대화형 쉘을 통해서 add할 hunk를 고르면 된다. 여기저기 고쳐진 로컬 저장소에서 딱 버그를 고친 hunk만 add하고 깔끔하게 커밋할 수 있다.

근데 사실 이걸로는 한계가 있다. hunk하나에 두 가지 이상의 고침이 섞여있는 경우도 흔하지 않은가.

git add --edit

이건 아예 로컬 저장소에 대한 변경 내역을 ADD_EDIT.patch 라는 파일로 만들어서 편집기에 띄워준다. 그럼 그 파일을 손으로 일일이 수정해서 깨끗하게 의도한 내용만 담은 패치로 만들어 저장하면, 자동으로 add가 된다.

나는 git add --interactive보다 이쪽을 더 선호한다. 사용법을 따로 배울 필요도 없고, 자유도도 높기 때문이다. 거의 모든 커밋마다 git add --edit으로 패치를 확인하고 불필요한 고침이 섞이지 않게 걸러낸다.

Advertisements

깔끔하게 커밋하기”에 대한 5개의 생각

    1. emacs 사용자에겐 git add –interactive나 git add –edit 보다 이 쪽이 훨씬 편하겠군요. vim의 git 플러그인인 fugitive에도 비슷한 기능이 있었던 것 같은데 찾아봐야겠네요

      좋아요

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중