공부/개발

[Git] 커밋 관련한 내용 총정리

na0-0 2025. 4. 9. 23:00
반응형

 

학창시절에는 git에서는 단순히 commit, merge, push, add 등등의 명령어만 사용하던 학생이

회사에 갔더니, PR과 commit, rebase, cherypick 등등 

대규모와 다양한 사람들과 협업하는 상황에서 이것저것 실수를 많이 하기도 하고,

여러명이 붙어서 PR review를 해주는데,

사람의 성향에 따라서 commit 내역을 위주로 따라 흐름을 보는 사람이 있고,

코드의 변화를 중점으로 보고 있는 사람이 있어서

PR을 날릴 때에는 여러 방면에서 신경을 써주어야 한다는 것을 느꼈다.

 

그리고 확실히 commit을 자유자제로 사용할 수 있다면,

조금 더 코드 관리가 쉬워질 것이라고 생각한다.

 


 

작업 중에 여러 차례의 커밋을 하는 것은 개발자에게 많은 이점을 제공한다.

어떤 변화를 주었을 때의 결과를 확인하거나, 이전 상태로 롤백하기에 훨씬 용이하다.

그런데 이렇게 많은 커밋들이 그대로 메인 브랜치에 병합되어 불필요한 Working In Progress 와 같은 커밋들이 섞여있다면 전체 히스토리를 파악하기가 힘들어질 것이다. (아 그래서, 생각보다 커밋이 완전 많지는 않았구나)

 

git squash를 통해 이러한 문제를 해결할 수도 있다.

 

커밋은 왜 중요한가?

프로젝트를 진행하면서 다양한 변경 사항들을 가진 커밋을 만든다.

이렇게 다양한 커밋들은 개발을 진행하면서 중간 체크포인트를 설정하는 것과 같아서, 이전 상태로 쉽게 돌아갈 수 있는 장점이 있습니다. 하지만, 이런 중간 커밋들을 그대로 메인 브랜치에 남기는 것은 좋지 않다.

 

Git Commit 취소

Git Commit 취소를 하는 방법에는 두가지가 있는데,

1. reset

이 방법은 commit 내역에도 안남기 때문에 주의가 필요하다.

이미 원격에서 push를 한 변경사항에 대해서도

git reset HEAD^

 

위와 같이 해주면 가장 최근의 commit이 삭제되고, push를 해주면 되는데, 그냥 push를 해줄 경우에는 오류가 난다.

현재 local과 remote와 기준이 달라서 pull 을 하고 push 를 기대한다.

 

그러나, 나는 commit을 취소하고 싶은 것이기 때문에 바로 -f 옵션을 주면 사라진다!

 

 

2. revert

이 방법은 revert를 했다는 것이 남은 commit 까지 존재한다,

그러면 revert "commit 내역" 이런식으로 들어가서, PR 리뷰 입장에서는 보는게 좋지 않을듯

만약에 revert한 테스크가 중요하다 싶으면 그렇게 하는것을 추천하지만,

그렇지 않으면 비추할 것 같다.

 

Git Squash란?

git squash는 여러 개의 커밋을 하나의 커밋으로 합치는 방법으로  이렇게 하면 여러 개의 중간 커밋들을 깔끔하게 정리하여 하나의 의미 있는 커밋으로 만들 수 있다.

 

Squash를 사용하여 커밋 정리하기

1. git rebase -i

Rebase 시작: 작업을 정리하고 싶은 커밋의 개수만큼 이전으로 이동하여 rebase를 시작

git rebase -i HEAD~[커밋 개수]

 

  • Interactive 모드: 텍스트 에디터가 열리며, 여러 커밋 목록이 표시됩니다. 합치고 싶은 커밋 앞의 키워드를 squash 또는 간단히 s로 변경
  • 커밋 메시지 정리: 커밋 메시지를 정리하거나 합친 커밋들의 메시지를 하나로
  • Rebase 완료: 모든 변경 사항을 저장 후 종료
  • 변경 사항 반영: 최종적으로 정리된 커밋을 원격 저장소에 반영

2. git merge --squash

git checkout main-branch
git merge --squash feature-branch
git commit 병합할 커밋 내용
  • 장점:
    여러 커밋을 간단하게 하나로 합침
    복잡한 Rebase 과정 없이 쉽게 사용 가능
  • 주의점:
    --squash 옵션으로 머지한 변경사항은 자동으로 커밋 X => 수동으로 커밋
    이미 원격 저장소에 푸시된 커밋에 대해 사용하는 것은 추천 X

 

 

 

출처 및 참고

- https://velog.io/@lgs03042/Git-Squash-커밋-기록-깔끔하게-관리하기

 

 

 

반응형