brunch

You can make anything
by writing

C.S.Lewis

by SEB Sep 13. 2016

알아두면 좋은 GIT 꿀팁 3개

쉘에 브랜치 표시, 모양을 예쁘게, Interactive Rebasing

오늘은 그냥 갑자기 마음이 동해서 GIT 초보 사용자들을 위한 몇가지 꿀팁을 공유해보려고 해요.


첫번째로, 쉘 프롬프트에 현재 브랜치 이름을 추가하는 방법입니다.

Bash쉘을 쓰신다면 ~/.bash_profile 파일에 아래 두줄을 추가하시면 됩니다.


parse_git_branch() {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
PS1="\[\033[0;32m\]\w\[\033[00m\]\$(parse_git_branch)\\$ "


원래 쓰시던 프롬프트 포멧이 있으시다면 빨간색으로 $(parse_git_branch) 만 추가해 주세요

이런식으로 Git repository에 들어갔을 경우에만 현재 브랜치 이름을 경로에 추가 할 수 있습니다.

여러개의 브랜치에서 작업 해야할 경우에 유용합니다.



두번째로, git log 의 모양을 예쁘게 만드는 설정입니다.

기본 설정에서 git log는 아래와 같은 모양입니다.

읽기도 어렵고 한 커밋당 5줄 이상을 차지하다보니 별로네요. Tag도 안보이고.

git lg 라는 alias를 만들고 위와 같은 포멧으로 바꿔봤습니다.

짧은 hash를 사용하고 태그와 메시지가 한줄에 보이며, 상대 시간을 사용해서 언제 수정되었는지도 더 보기 쉽게 바꿔봤습니다.


~/.gitconfig 파일에 [alias] 섹션에 다음 한줄을 추가 하시면 됩니다.


lg = log --color --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit


이건 제가 쓰는 .gitconfig 파일 전문입니다. 참고하실 분은 참고하시길.



세번째로, 더러워진 commit log를 병합하거나 정리하는 방법입니다. 

이건 좀 rebase에 대한 개념을 이해하셔야 하는데, 개념을 잘 정리해놓은 문서는 여기에 있으니 참고하세요.


간단히 제일 마지막 커밋 메시지를 바꾸려면 git commit --amend 를 사용하시면 되는건 대부분 알고 계실텐데요..


가끔 급하게 hot fix를 올리거나 테스트를 하다보면 여러번의 커밋을 통해 로그가 지저분해지기도 합니다.

이런걸 그냥 푸시하면 동료 개발자들한테도 민폐고 나중에 commit 로그 볼때도 불편하죠.


Interactive rebasing 을 통해 깔끔하게 정리해봅시다! 쉘에

git rebase -i HEAD~5

라고 입력하면 기본 에디터 (vim, nano, etc)를 통해 다음과 같은 editing 세션으로 들어갑니다.

(여기서 HEAD~5는 HEAD부터 최근 5개의 커밋을 수정하겠다는 뜻이에요)


최근 5개의 커밋로그 옆에 기본적으로 pick command가 입력되어 있고, 밑에 각 커멘드에 대한 사용법을 친절하게 알려줍니다. 제일 중요한건 s 커맨드 (squash)인데요 해당 커밋을 그 전 커밋이랑 병합하라는 의미입니다.


위의 예시에서 필요한 커밋 두개만 남기고 나머지를 병합하려면

다음과 같이 수정하고 (s = squash) 저장후 에디터를 종료합니다. (vim의 경우 :wq)

그러면 바로 commit 메시지를 수정 할 수 있는 화면으로 넘어가는데요

첫번째 squash 작업 (test 2 => Test1)을 먼저 보여주고 이 화면에서 코멘트 처리(#) 되어있는부분은 모두 무시하시고 아래 화면처럼 새로운 커밋 메시지만 남기고 나머지 비 주석처리 부분은 다 지워줍니다.

다시 저장후 종료 (:wq) 하면 다음 3개의 squash 작업에 대한 Editing화면이 나오고

똑같이 필요한 메시지만 남기고 다 지워줍니다.


마지막으로 저장후 에디터를 종료하시면 커밋 로그가 깔끔하게 정리된걸 확인 하실 수 있습니다.


깃 커밋로그를 깔끔하게 정리해주시는건 같이 작업하는 동료들에 대한 예의라고 생각합니다.


더러운 커밋들을 이미 push 하신 상태라면 git push -f 명령으로 강제 푸시를 해주셔야 하는데요,

그 전에 다른 새로운 커밋들이 있을 지 모르니 확인 하시고 pull & rebase 해주시면 됩니다.




여기까지 GIT 꿀팁 3가지 포스팅을 마치겠습니다.

정정해야 할 부분이나 더 알려주시고 싶으신 부분은 코멘트 해주세요.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari