etc

git commit 관련 조작하기 (feat. lazygit)

민사민서 2024. 8. 29. 15:44
brew install lazygit

커밋 메시지 renaming

가끔 github workflow 에 커밋메시지 포맷을 검사하는 루틴이 있는 경우가 있다

그런 경우 과거 커밋 메시지들을 포맷에 맞게 재설정해야한다

 

git rebase -i HEAD~20 입력 ㄱㄱ

여기서 바꾸고 싶은 커밋 옆에 pick 지우고 reword 라 쓰고 넘어가면

한 커밋씩 메시지를 바꿀 수 있다

 

Vim이랑 사용법 좀 다르니 유의

  • ctrl+X 가 exit, format은 그냥 선택 안 하고 엔터만 입력해도 됨

풀리퀘 안에 중복된 커밋 합치기

커밋 1에서 추가한 함수의 type hint 가 파이썬 3.8 문법에서는 지원을 안 해 workflow 일부에서 실패를 하는 현상이 발생했고,
이것이 커밋 3에서 수정되었다. 동일 함수에 대한 수정 사항이 두 커밋에 나눠져있으므로 리뷰어를 위해 두 개를 합쳐보자

 

git command CLI로 하기 복잡하므로 pygobject를 사용해봅시다

https://github.com/jesseduffield/lazygit?tab=readme-ov-file

 

GitHub - jesseduffield/lazygit: simple terminal UI for git commands

simple terminal UI for git commands. Contribute to jesseduffield/lazygit development by creating an account on GitHub.

github.com

brew install lazygit

 

프로젝트 루트 디렉토리에서 lazygit 명령어를 입력해서 실행

 

 

합치고 싶은 커밋 클릭한 뒤 f(fixup) 혹은 s(squash) 누르면 바로 아래 커밋과 합쳐지네요

  • Squash (s): Squash는 두 개의 커밋을 하나로 합치면서, 두 커밋의 커밋 메시지를 합쳐줍니다. 이 과정에서 새로운 커밋 메시지를 수정하거나 둘 중 하나를 선택하는 옵션을 제공합니다. 즉, 이전 커밋의 메시지와 함께 새 커밋의 메시지를 결합할 수 있습니다.
  • Fixup (f): Fixup은 두 커밋을 하나로 합치되, 수정된 커밋의 메시지를 무시하고 이전 커밋의 메시지만 남깁니다. 즉, 추가된 내용만 합쳐지며, 커밋 메시지는 그대로 유지됩니다.

근데 위 방법보다는

 

i 를 눌러 interactive rebase 로 넘어간다음 squash (s), fixup (f), drop (d), edit (e), move up (ctrl+i) or move down (ctrl+j) any of TODO commits 등을 직접 진행하는게 더 정교한 작업이 가능할 듯

 

  • commit1, commit2, commit3, commit4가 있다고 가정할 때, commit2와 commit4만 합치고 싶다면:
  1. 리베이스 목록에서 commit2에 edit 또는 squash/fixup 설정.
  2. commit3을 pick으로 그대로 둡니다.
  3. commit4에 fixup을 선택하여 commit2에 합칩니다.

이 방법을 통해 commit2와 commit4를 합치면서 commit3을 유지할 수 있습니다.

 

 

합친 뒤 force push 하면 히스토리가 덮어써집니다

git push origin [branch name] --force