Post

[Git] 변경 사항 중 커밋 단위 분리하여 각각 테스트하고 커밋하는 방법

📝 개요


협업 시 충돌을 방지하기 위해서는 커밋 단위를 작게 나누는 것이 좋다.
하지만 하나의 기능이 완료될 때마다 Commit, Push, PR, Merge, Pull 등의 과정을 진행하는건
작업의 흐름이 끊기기 때문에 한 번에 여러가지 기능을 만드는 상황이 생길 수 밖에 없다.

분리할 변경사항들을 커밋만 할 경우 사람이 직접 수동으로 선택하는 것이기 때문에
가령 코드에서 import 하는 부분을 빼먹었다던지 하는 실수를 하게 되면
이 시점의 코드들을 가져와 실행했을 때 오류가 발생하게 될 것이다.

그래서 꼭 기능별로 테스트를 하고 커밋을 할 수 있어야 하는데 그 방법에 대해 정리해보고자 한다.

✅ 방법


  1. git stash
    • 현재 작업 중인 모든 변경 내역을 임시 저장한다.
  2. git stash apply: 가장 최근 stash를 가져와 적용
    • 임시 저장했던 변경 사항을 로컬에 적용
    • 로컬에 적용하더라도 stash 는 남아 있는 상태
  3. git add -p
    • 테스트할 기능에 해당하는 파일 및 코드만 스테이징 영역으로 이동
  4. git restore .
    • 스테이징되지 않은 나머지 변경 사항은 로컬에서 제거
  5. 제거된 상태에서 테스트를 진행하고 커밋

  6. git stash apply
    • 남아 있던 stash 를 다시 로컬에 적용
    • 이 때 충돌(Conflict)이 발생하면 병합(Merge) 진행

🔍 커밋 단위를 작게 나누는 이유


  1. 커밋 내역을 많이 남겨 놓을수록 롤백이 수월하다.
  2. 코드 리뷰가 용이하다.
  3. 충돌 발생 시 해결이 비교적 쉽다.

✒️ 회고


해당 방법으로 해결할 수는 있겠지만 수정한 코드의 양이 많다면
기능별로 파일 및 코드라인들을 수동선택하는 것이 쉽지만은 않을거라고 생각한다.
실무에서는 외부툴(Jira)을 활용해 관리한다고도 하는데
설계를 꼼꼼히해서 두가지 이상의 기능을 동시에 작업하지 않도록 최대한 방지하는 것이 좋을 것 같다.