Git에서 커밋 스쿼싱 마스터하기:
프로젝트 작업을 할 때 커밋 기록은 수많은 작은 커밋으로 인해 복잡해질 수 있습니다. 이러한 사소한 커밋으로 인해 변경 사항을 검토하고 프로젝트 기록을 이해하기가 어려울 수 있습니다.
Git에서는 마지막 N개 커밋을 단일 커밋으로 압축하여 더 깔끔하고 관리하기 쉬운 기록을 만들 수 있습니다. 이 가이드에서는 이를 달성하는 단계를 안내하여 버전 관리를 더욱 효율적으로 만듭니다.
명령 | 설명 |
---|---|
git rebase -i HEAD~N | 마지막 N 커밋의 대화형 리베이스를 시작합니다. |
pick | 대화형 리베이스 중에 커밋을 있는 그대로 유지합니다. |
squash | 대화형 리베이스 중에 커밋을 이전 커밋과 결합합니다. |
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo | 리베이스 할 일 목록의 첫 번째 커밋을 제외한 모든 커밋에 대해 'pick'을 'squash'로 자동으로 바꿉니다. |
git rebase --continue | 충돌을 해결한 후 리베이스 프로세스를 계속합니다. |
git rebase --abort | Rebase 프로세스를 중단하고 Rebase가 시작되기 전 상태로 돌아갑니다. |
HEAD~N | 현재 HEAD 이전의 커밋 N 위치를 참조합니다. |
Git 커밋 스쿼싱 이해
첫 번째 스크립트는 마지막 N 커밋의 대화형 리베이스를 시작합니다. 대화형 화면에서 결합하려는 커밋에 대해 'pick'을 'squash'로 바꿉니다. 이 프로세스는 여러 개의 작은 커밋을 하나로 통합하여 커밋 기록을 더욱 깔끔하고 관리하기 쉽게 만드는 데 도움이 됩니다. 편집 후 편집기를 저장하고 닫습니다. 충돌이 있으면 이를 해결하고 계속 진행합니다. .
두 번째 스크립트는 스쿼싱 프로세스를 자동화하는 Bash 스크립트입니다. 커밋 수(N)가 제공되는지 확인하는 것부터 시작됩니다. 그런 다음 실행됩니다. 그리고 사용 리베이스 할 일 목록의 첫 번째 커밋을 제외한 모든 커밋에 대해 'pick'을 'squash'로 대체합니다. 이렇게 하면 파일을 수동으로 편집하지 않고도 여러 커밋을 더 쉽게 스쿼시할 수 있습니다. 마지막으로 리베이스 프로세스를 계속합니다. , 필요한 충돌 해결을 자동으로 처리합니다.
Git Rebase를 사용하여 여러 커밋을 하나로 스쿼시
힘내 명령
git rebase -i HEAD~N
# Replace N with the number of commits you want to squash
# In the interactive rebase screen that appears, change 'pick' to 'squash' (or 's') for the commits you want to squash
# Save and close the editor
# Edit the commit message if needed, then save and close the editor again
# If there are conflicts, resolve them and then run
git rebase --continue
# Your last N commits are now squashed into one commit
쉘 스크립트를 사용하여 커밋 스쿼시 자동화
배쉬 스크립트
#!/bin/bash
if [ -z "$1" ]
then
echo "Usage: ./squash_commits.sh <N>"
exit 1
fi
git rebase -i HEAD~$1
# Automatically replace 'pick' with 'squash' for all but the first commit
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo
git rebase --continue
고급 Git 스쿼싱 기술
Git에서 커밋을 스쿼시하는 데 있어 또 다른 중요한 측면은 프로세스 중에 발생할 수 있는 병합 충돌을 처리하는 것입니다. 여러 커밋을 결합할 때 서로 다른 커밋의 변경 사항이 서로 충돌할 수 있습니다. 이러한 충돌을 해결하기 위해 Git은 다음과 같은 명령을 제공합니다. 어떤 파일이 충돌하는지 확인하고 해결된 것으로 표시합니다. 충돌을 해결한 후 다음을 사용하여 리베이스를 계속합니다. .
문제가 발생할 경우 리베이스를 중단하는 방법을 아는 것도 유용합니다. 명령 리베이스 프로세스를 중지하고 리베이스가 시작되기 전의 이전 상태로 저장소를 되돌립니다. 이렇게 하면 리베이스 프로세스 중에 변경된 내용을 안전하게 취소할 수 있습니다. 이러한 명령을 이해하면 복잡한 Git 기록을 효율적으로 관리하는 능력이 크게 향상될 수 있습니다.
- 스쿼싱 커밋은 무엇을 의미하나요?
- 스쿼싱 커밋은 여러 커밋을 단일 커밋으로 결합하여 커밋 기록을 단순화하는 것을 의미합니다.
- 왜 커밋을 스쿼시해야 하나요?
- 커밋을 스쿼시하면 특히 작은 커밋이 많이 사용될 때 프로젝트 기록을 더 깔끔하고 읽기 쉽게 만들 수 있습니다.
- 대화형 리베이스를 어떻게 시작하나요?
- 명령을 사용하십시오 , N을 스쿼시하려는 커밋 수로 바꿉니다.
- 대화형 리베이스에서 '선택'과 '스쿼시'는 무엇을 의미하나요?
- 'Pick'은 커밋을 그대로 유지하는 반면, 'squash'는 커밋을 이전 커밋과 결합합니다.
- 리베이스 중 충돌을 어떻게 해결하나요?
- 사용 충돌을 식별하고 수동으로 해결한 다음 그리고 .
- 문제가 발생하면 리베이스를 중단할 수 있나요?
- 예, 사용할 수 있습니다 리베이스를 중지하고 이전 상태로 돌아갑니다.
- 커밋을 스쿼시하기 위해 Bash 스크립트를 사용하면 어떤 이점이 있나요?
- Bash 스크립트는 프로세스를 자동화하여 시간을 절약하고 수동 오류의 위험을 줄입니다.
- 리베이스에서 커밋을 자동으로 스쿼시하는 방법이 있나요?
- 예, 스크립트를 사용하여 리베이스 할 일 목록을 수정하면 됩니다. , 'pick'을 'squash'로 자동 변경할 수 있습니다.
Git 커밋 스쿼시 마무리
Git에서 커밋을 스쿼시하는 것은 깨끗하고 읽기 쉬운 프로젝트 기록을 유지하는 강력한 기술입니다. 대화형 리베이스를 사용하든 Bash 스크립트로 자동화하든 여러 커밋을 단일 커밋으로 결합하여 로그를 더 쉽게 관리할 수 있습니다. 충돌을 해결하고 리베이스를 중단하는 방법을 이해하면 Git 숙련도가 향상되어 발생하는 모든 문제를 처리할 수 있습니다. 이러한 명령과 방법을 익히면 버전 관리 방식이 크게 향상됩니다.