article thumbnail image
Published 2021. 10. 26. 18:26

commit 히스토리 보기

$ git log

 

가장 오래된 커밋 메시지가 가장 아래에 있고 최근 커밋이 맨 위에 있다.

 

commit 다음 길게 써져있는 문자열은 커밋 아이디이다.

깃은 각각의 커밋을 구별하기 위해 아이디를 붙여서 관리한다.

commit hash 라고도 한다.

커밋을 한 사람과 커밋 한 시간까지 나와 있다.

 

더 깔끔하게 봐보자

q를 눌러 나가주자.

 

$ git log --pretty=oneline

커밋 로그를 이쁘게 한줄씩 출력하기

 

그럼 어떤 파일이 어떻게 변했는지 알아보자.

 

README 파일은 어떻게 변했을까?

$ git show 1d53

여기서 --- 까지가 해당 커밋 이전의 모습이고

그밑에 +++ 까지가 해당 커밋 이후의 모습이다.


m 옵션 없이 commit message 남기기

$ git commit

만 치면 새로운 창이 뜬다.

그냥 안내 문구 이고 위의 것은 커밋 메시지에 포함되지 않는다.

위의 것은 vim 으로 열린 것이다.

 

따라서 i를 눌러서

커밋 메시지를 자유롭게 입력하고 Esc 누르고 , :wq 를 입력하면 저장된다.

 

이렇게 -m 옵션 없이 git commit 만으로 하는 이유는 복잡하고 긴 커밋 메시지를 쉽게 남길 수 있기 때문이다.


commit message 수정하기

git add . 이후에

잘못된 커밋을 했거나 커밋 메시지를 고치고 싶을 때가 있다.

 

--amend : 수정하다, 고치다

$ git commit --amend

위의 커맨드로 최신 커밋을 수정할 수 있다.

그리고 나서 git push를 통해 업로드하면 된다.

 

 

amend 했을 때 에러가 뜰 수도 있는데 이것은 vim을 사용하지 않고 GUI 에디터나 다른 에디터를 이용해서 그런 것일 수도 있다.

만약 amend 후에 push 했을 때, 에러가 뜬다면

$ git push --force

위의 명령어를 이용해보아라.


commit message 가이드라인

커밋(commit)은 Git에서 가장 핵심적인 개념이다.

커밋은 staging area의 현 상태를 그대로 하나의 버전으로 남기는 작업, 또는 그 결과물을 가리키는 말이라고 했는데, 커밋에는 크게 다음과 같은 3가지 정보가 있다.

 

  1. 커밋을 한 사용자 아이디 
  2. 커밋한 날짜, 시간
  3. 커밋 메시지

 

특정 프로젝트 디렉토리가 어떻게 변해왔는지를 한 눈에 잘 파악하기 위해서는 커밋의 이런 정보들이 아주 중요하다.

 

그런데 1, 2는 커밋을 할 때 Git에서 자동으로 기록해주지만, 3 커밋 메시지는 커밋을 하는 사람이 매번 직접 작성하는 것이기 때문에 사람마다 그 분량이나 스타일이 제각각일 수 있다.

 

개인 프로젝트의 경우에는 커밋 메시지를 어떻게 작성하든 큰 상관이 없을 수 있지만, 회사에서 여러 명이 참여하는 프로젝트의 경우에는 이 커밋 메시지가 아주 중요하다. 그래서 커밋 메시지를 어떻게 작성해야하는지에 대한 규칙이 정해져있는 경우가 많은데, 그 규칙들은 회사마다 전부 다를 것이다.

 

그래도 커밋 메시지를 어떻게 작성하면 좋은지에 대한 일반론적인 가이드라인은 있다. 아래를 보자.

 

커밋 메시지의 제목과 상세 설명 사이에는 한 줄을 비워두어라.

 

지금 1번이 커밋 메시지의 제목(title), 2번이 커밋 메시지의 상세 내용(body)이라고 생각하면 된다. 뭔가 상세한 설명이 필요한 커밋인 경우에는 커밋 메시지 한 줄보다는 이런 식으로 제목과 상세 내용으로 구분해서 적어주면 좋은데, 이럴 때 제목과 상세 내용 사이에 한 줄을 띄워놓아야 나중에 커밋 메시지를 볼 때 좀더 편하게 볼 수 있다.

 

그리고 이렇게 비어있는 한 줄을 두는 것이 Git에서 공식적으로 권장하는 사항(예를 들어, 특정 명령어가 이 한 줄을 기준으로 제목과 상세 내용을 구분해서 사용한다고 한다)이기도 하니까 꼭 지키는 것이 좋다.

 

커밋 메시지의 제목 뒤에 온점(.)을 붙이지 마라.

커밋 메시지의 제목의 첫 번째 알파벳은 대문자로 작성하라.

커밋 메시지의 제목은 명령조로 작성하라.(Fix it / Fixed it / Fixes it)

커밋의 상세 내용에는 이런 걸 적으면 좋다.

  • 왜 커밋을 했는지
  • 어떤 문제가 있었고
  • 적용한 해결책이 어떤 효과를 가지는지

다른 사람들이 자신의 코드를 바로 이해할 수 있다고 가정하지 말고 최대한 친절하게 작성하라.


commit 가이드라인

그런데 사실 커밋 메시지를 작성하는 방법뿐만 아니라 커밋을 남기는 것 자체에 관해서도 일종의 가이드라인이 있다. 그것들을 정리해보면 아래와 같다.

 

하나의 커밋에는 하나의 수정사항, 하나의 이슈(issue)를 해결한 내용만 남기도록 하자.

다양하게 수정을 하고나서 하나의 커밋으로 남기는 것은 좋지 않다.

하나의 커밋이 하나의 사실만을 갖고 있어야 나중에 이해하기 쉽다.

다양한 종류의 수정을 다 하고나서야 커밋을 하면 바로 그 다음에 프로그램에 문제가 생겼을 때 그 원인을 파악하는데 시간이 더 오래 걸린다. 그리고 이렇게 하면 커밋 간의 독립성이 사라져서 나중에 프로젝트의 이력을 파악하는 일도 어려워지기도 한다.

 

현재 프로젝트 디렉토리의 상태가 그 내부의 전체 코드를 실행했을 때 에러가 발생하지 않는 상태인 경우에만 커밋을 하도록 하자.

나중에 동료 개발자가 특정 커밋의 코드로 실행했을 때 에러가 발생한다면 혼란을 줄 수 있다.

이미 과거의 커밋이 되어버렸다고 우리에게 쓸모없는 커밋이 되는 건 절대 아니다.

 

과거의 커밋이라도

  1. 과거 버전의 프로그램을 사용해야하거나
  2. 과거 커밋을 시작점으로 한 다른 방향의 별도 프로젝트를 시작하거나
  3. 아예 그 커밋으로 현재 프로젝트를 리셋할 수도 있다.

 

따라서 매 커밋의 코드들은 항상 정상 실행되는 상태의 코드여야 한다.


긴 커맨드에 alias 설정하기

로그를 확인할 때, git log --pretty=oneline 을 사용했다.

매번 이렇게 치기 귀찮아서 git history 라고 커맨드를 바꿔보고 싶다.

이것을 별명을 붙이는 거라고 하고, 붙이는 별명은 alias, 별명 붙이는 행위를 aliasing 이라고 한다.

 

$ git config alias.history 'log --pretty=oneline'

이렇게 쓰고 실행하고 나면 앞으로 git histroy 라고만 써도 자동으로 git log --pretty=oneline을 실행하게 됩니다.


log 이쁘게 보여지게 바꾸기

 

설정하면 이미지 처럼 보여지게 된다.

특징은 체크섬(48cb60d)을 줄여서 보여주고, 언제 commit 을 했는지, 그리고 commit 한 user 를 보여주게 됩니다. 하기도 한다.

 

설정하는 건 기계인간님의 블로그 https://johngrib.github.io/wiki/git-alias/ 에서 확인 가능하다.

 

설정 방법은 https://www.codeit.kr/learn/courses/version-control-with-git/2910 을 참고해서 직접 명령어로 쳐도 되고,

직접 config 를 Vim 으로 수정하는 방법도 있다.

 

  1. 현재 로컬컴퓨터의 사용자에게 alias 을 설정해주려면 윈도우에서는 git bash 로, 맥에서는 terminal 이나 iterm 으로 vim ~/.gitconfig 를 치면 된다.
  2. vim 화면이 나타나면 아래 코드 전체를 복붙해준다.
[alias] 
l = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit

 

:wq 로 저장 후에

git l 만 치면 상단의 이미지와 같이 출력이 된다.

 

만약 명령을 통해 설정하자면

$ git config --global alias.l "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"

위의 코드를 복붙해서 실행하면 된다.

 

Ref : Youngjun 님의 글


alias 해제하기

alias 의 경우

만약 --global 옵션으로 특정 사용자가 생성하는 모든 프로젝트에서 alias 를 적용하는 경우엔 .gifconfig 파일에,

특정 프로젝트에만 alias 를 적용했다면 해당 프로젝트의 .git/config 에 alias 설정이 되어 있을 것이다.

 

그러므로 이 파일을 백업하거나 파일에서 일부를 따로 저장해도 될 것이다.

 

.gitconfig 파일 위치는

unix 계열에서는 ~/.gitconfig

window 에서는 c:\Users\사용자\.gitconfig

에 있다.


 

'🚦 Server > git' 카테고리의 다른 글

git 명령어 정리  (0) 2022.03.04
git, GitHub 시작하기  (0) 2021.10.22
복사했습니다!