[Git] 변경 사항 중 커밋 단위 분리하여 각각 테스트하고 커밋하는 방법
📝 개요
협업 시 충돌을 방지하기 위해서는 커밋 단위를 작게 나누는 것이 좋다.
하지만 하나의 기능이 완료될 때마다 Commit, Push, PR, Merge, Pull 등의 과정을 진행하는건
작업의 흐름이 끊기기 때문에 한 번에 여러가지 기능을 만드는 상황이 생길 수 밖에 없다.
분리할 변경사항들을 커밋만 할 경우 사람이 직접 수동으로 선택하는 것이기 때문에
가령 코드에서 import 하는 부분을 빼먹었다던지 하는 실수를 하게 되면
이 시점의 코드들을 가져와 실행했을 때 오류가 발생하게 될 것이다.
그래서 꼭 기능별로 테스트를 하고 커밋을 할 수 있어야 하는데 그 방법에 대해 정리해보고자 한다.
✅ 방법
git stash- 현재 작업 중인 모든 변경 내역을 임시 저장한다.
git stash apply: 가장 최근 stash를 가져와 적용- 임시 저장했던 변경 사항을 로컬에 적용
- 로컬에 적용하더라도 stash 는 남아 있는 상태
git add -p- 테스트할 기능에 해당하는 파일 및 코드만 스테이징 영역으로 이동
git restore .- 스테이징되지 않은 나머지 변경 사항은 로컬에서 제거
제거된 상태에서 테스트를 진행하고 커밋
git stash apply- 남아 있던 stash 를 다시 로컬에 적용
- 이 때 충돌(Conflict)이 발생하면 병합(Merge) 진행
🔍 커밋 단위를 작게 나누는 이유
- 커밋 내역을 많이 남겨 놓을수록 롤백이 수월하다.
- 코드 리뷰가 용이하다.
- 충돌 발생 시 해결이 비교적 쉽다.
✒️ 회고
해당 방법으로 해결할 수는 있겠지만 수정한 코드의 양이 많다면
기능별로 파일 및 코드라인들을 수동선택하는 것이 쉽지만은 않을거라고 생각한다.
실무에서는 외부툴(Jira)을 활용해 관리한다고도 하는데
설계를 꼼꼼히해서 두가지 이상의 기능을 동시에 작업하지 않도록 최대한 방지하는 것이 좋을 것 같다.