스쿼시 및 병합
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
스쿼시 및 병합은 여러 개의 작은 커밋을 하나의 의미 있는 커밋으로 결합합니다. 브랜치가 기본 브랜치에 병합될 때마다 최대 두 개의 커밋이 추가됩니다: 기본적으로 스쿼시된 커밋에는 다음 메타데이터가 포함됩니다: 프로젝트 소유자는 모든 스쿼시 커밋 및 병합 커밋에 대한 새 기본 메시지를 만들 수 있습니다.
스쿼시 및 병합은 여러 개의 작은 커밋을 하나의 의미 있는 커밋으로 결합합니다. 이 전략은 저장소 히스토리를 깨끗하게 유지하고 변경 사항을 추적하거나 되돌리기 쉽게 합니다. 여러 기능을 동시에 작업할 때 스쿼싱은 각 기능의 변경 사항을 별개의 논리적 단위로 분리합니다.
- 작은 커밋이 합쳐져 변경의 모든 부분을 되돌리기 더 쉬워집니다.
- 단일 커밋이 대상 브랜치에 병합될 때 전체 커밋 히스토리가 유지됩니다.
- 기본 브랜치가 깔끔하게 유지되고 의미 있는 커밋 메시지가 포함됩니다.
스쿼시 및 병합 워크플로#
브랜치가 기본 브랜치에 병합될 때마다 최대 두 개의 커밋이 추가됩니다:
- 브랜치의 커밋을 스쿼싱하여 만들어진 단일 커밋.
- 프로젝트에서 빠른 전진 병합을 활성화하지 않은 경우 병합 커밋. 빠른 전진 병합은 추가 병합 커밋 생성을 방지하지만 브랜치의 커밋을 단일 커밋으로 스쿼시할 수 있습니다.
기본적으로 스쿼시된 커밋에는 다음 메타데이터가 포함됩니다:
- 메시지: 스쿼시 커밋 설명 또는 커스터마이징된 메시지
- 작성자: 머지 리퀘스트를 만든 사용자
- 커미터: 스쿼시를 시작한 사용자
프로젝트 소유자는 모든 스쿼시 커밋 및 병합 커밋에 대한 새 기본 메시지를 만들 수 있습니다.
머지 리퀘스트의 기본 스쿼시 옵션 설정#
머지 리퀘스트를 생성하거나 편집할 권한이 있는 사용자는 머지 리퀘스트의 기본 스쿼시 옵션을 설정할 수 있습니다.
전제 조건:
- 프로젝트가 스쿼싱을 허용하거나 권장하도록 구성되어 있어야 합니다.
이를 수행하려면:
- 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
- Edit을 선택합니다.
- Squash commits when merge request is accepted 체크박스를 선택하거나 해제합니다.
- Save changes를 선택합니다.
머지 리퀘스트에서 커밋 스쿼시#
프로젝트에서 머지 리퀘스트의 스쿼싱 옵션을 선택할 수 있는 경우 병합 과정의 일부로 커밋을 스쿼시하려면:
- 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
- 머지 리퀘스트 위젯에서 Squash commits 체크박스가 선택되어 있는지 확인합니다. 이 체크박스는 프로젝트의 스쿼싱 옵션이 Do not allow 또는 Require로 설정된 경우 표시되지 않습니다.
- 선택 사항. 스쿼시 커밋 메시지 또는 병합 커밋 메시지를 수정하려면(프로젝트 구성에 따라) Modify commit messages를 선택합니다.
- 머지 리퀘스트를 병합할 준비가 되면 Merge를 선택합니다.
프로젝트의 스쿼시 옵션 구성#
전제 조건:
- 이 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
프로젝트의 모든 머지 리퀘스트에 대한 기본 스쿼싱 동작을 구성하려면:
- 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > Merge requests를 선택합니다.
- Squash commits when merging 섹션에서 원하는 동작을 선택합니다:
- Do not allow: 스쿼싱이 수행되지 않으며 옵션이 표시되지 않습니다.
- Allow: 스쿼싱이 허용되지만 기본적으로 해제되어 있습니다.
- Encourage: 스쿼싱이 허용되고 기본적으로 선택되어 있지만 비활성화할 수 있습니다.
- Require: 스쿼싱이 항상 수행됩니다. 머지 리퀘스트에 스쿼시 옵션이 표시되지만 사용자는 변경할 수 없습니다.
- Save changes를 선택합니다.
장기 실행 브랜치 동작#
스쿼시 및 병합은 장기 실행 브랜치에는 사용하지 않는 것이 좋습니다. 대신 원래 커밋 히스토리를 보존하는 병합 방법(예: 병합 커밋 또는 패스트-포워드 병합)을 사용하세요.
새 커밋을 계속 받는 브랜치를 스쿼시 및 병합하면 브랜치 히스토리가 대상 브랜치에서 분기됩니다. 스쿼시는 대상 브랜치에서 다른 SHA를 가진 단일 새 커밋을 생성합니다. 대상 브랜치를 리베이스하거나 병합하지 않고 소스 브랜치에서 계속 작업하면 Git은 히스토리가 분기된 것으로 처리합니다.
해당 소스 브랜치에서 새 머지 리퀘스트를 열면 다음이 표시됩니다:
- 이전 머지 리퀘스트에서 이미 병합된 커밋.
- 소스 브랜치가 대상 브랜치보다 뒤에 있다는 경고.
diff는 대상 브랜치에 아직 없는 새 변경 사항만 올바르게 표시합니다.
스쿼시 병합 후 장기 실행 브랜치를 대상과 동기화 상태로 유지하려면:
- 각 병합 후 대상 브랜치에서 소스 브랜치를 리베이스합니다.
- 각 병합 후 대상 브랜치를 소스 브랜치에 병합합니다.
