변경 사항 스테이지, 커밋 및 푸시
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
리포지터리의 파일을 변경하면 Git은 체크아웃된 브랜치의 최신 버전과 비교하여 변경 사항을 추적합니다. 브랜치에 변경 사항을 작성할 준비가 되면 커밋할 수 있습니다. Git은 커밋에서 이동, 변경 또는 삭제한 파일을 자동으로 포함하지 않습니다.
리포지터리의 파일을 변경하면 Git은 체크아웃된 브랜치의 최신 버전과 비교하여 변경 사항을 추적합니다. Git 명령어를 사용하여 브랜치의 변경 사항을 검토하고 커밋하고, 작업을 GitLab에 푸시할 수 있습니다.
로컬 변경 사항 추가 및 커밋#
브랜치에 변경 사항을 작성할 준비가 되면 커밋할 수 있습니다. 커밋에는 변경 사항에 대한 정보를 기록하는 코멘트가 포함되며 일반적으로 브랜치의 새 팁이 됩니다.
Git은 커밋에서 이동, 변경 또는 삭제한 파일을 자동으로 포함하지 않습니다. 이는 임시 디렉터리와 같은 변경 사항이나 파일을 실수로 포함하는 것을 방지합니다. 커밋에 변경 사항을 포함하려면 git add로 스테이지하세요.
변경 사항을 스테이지하고 커밋하려면:
-
리포지터리에서 추가하려는 각 파일 또는 디렉터리에 대해
git add <file name or path>를 실행합니다.현재 작업 디렉터리의 모든 파일을 스테이지하려면
git add .를 실행합니다. -
파일이 스테이징에 추가되었는지 확인합니다:
git status파일이 녹색으로 표시됩니다.
-
스테이지된 파일을 커밋하려면:
git commit -m "<comment that describes the changes>"
변경 사항이 브랜치에 커밋됩니다.
좋은 커밋 메시지 작성#
Chris Beams이 How to Write a Git Commit Message에서 게시한 가이드라인은 좋은 커밋 메시지를 작성하는 데 도움이 됩니다:
- 커밋 제목과 본문은 빈 줄로 구분해야 합니다.
- 커밋 제목은 대문자로 시작해야 합니다.
- 커밋 제목은 72자를 초과하면 안 됩니다.
- 커밋 제목은 마침표로 끝나면 안 됩니다.
- 커밋 본문은 줄당 72자를 초과해서는 안 됩니다.
- 커밋 제목 또는 본문에 이모지를 포함하면 안 됩니다.
- 3개 이상의 파일에서 30줄 이상을 변경하는 커밋은 커밋 본문에 이러한 변경 사항을 설명해야 합니다.
- GitLab 외부에서는 일반 텍스트로 표시되므로 이슈, 마일스톤, 머지 리퀘스트에는 짧은 참조 대신 전체 URL을 사용하세요.
- 머지 리퀘스트에는 10개 이상의 커밋 메시지가 포함되어서는 안 됩니다.
- 커밋 제목에는 최소 3개의 단어가 포함되어야 합니다.
모든 변경 사항 커밋#
하나의 명령으로 모든 변경 사항을 스테이지하고 커밋할 수 있습니다:
git commit -a -m "<comment that describes the changes>"
커밋에 원격 리포지터리에 기록하지 않으려는 파일이 포함되지 않도록 주의하세요. 원칙적으로 항상 변경 사항을 커밋하기 전에 로컬 리포지터리의 상태를 확인하세요.
GitLab에 변경 사항 전송#
모든 로컬 변경 사항을 원격 리포지터리에 푸시하려면:
git push <remote> <name-of-branch>
예를 들어 로컬 커밋을 origin 원격의 main 브랜치에 푸시하려면:
git push origin main
때때로 Git이 리포지터리에 푸시하지 못하도록 합니다. 그 대신 강제 업데이트해야 합니다.
푸시 옵션#
브랜치에 변경 사항을 푸시할 때 클라이언트 측 Git 푸시 옵션을 사용할 수 있습니다. Git 2.10 이상에서 Git 푸시 옵션을 사용하여:
Git 2.18 이상에서는 긴 형식(--push-option) 또는 짧은 형식 -o를 사용할 수 있습니다:
git push -o <push_option>
Git 2.10에서 2.17까지는 긴 형식을 사용해야 합니다:
git push --push-option=<push_option>
서버 측 제어 및 모범 사례 적용은 푸시 규칙과 서버 훅을 참조하세요.
GitLab CI/CD를 위한 푸시 옵션#
푸시 옵션을 사용하여 CI/CD 파이프라인을 건너뛰거나 CI/CD 변수를 전달할 수 있습니다.
머지 리퀘스트 파이프라인에는 푸시 옵션을 사용할 수 없습니다. 자세한 내용은 이슈 373212를 참조하세요.
| 푸시 옵션 | 설명 | 예시 |
|---|---|---|
ci.input=<name>=<value> |
파이프라인에 입력 매개변수를 전달합니다. | git push -o ci.input='stage=test' -o ci.input='security_scan=false'. 배열 입력: git push -o ci.input='my_array=["string", "double", "quotes"]' |
ci.skip |
이 푸시에 대한 파이프라인을 건너뜁니다. 브랜치 파이프라인에만 영향을 주며 머지 리퀘스트 파이프라인에는 영향을 주지 않습니다. Jenkins와 같은 CI/CD 통합은 건너뛰지 않습니다. | git push -o ci.skip |
ci.variable="<name>=<value>" |
파이프라인에 CI/CD 변수를 설정합니다. 브랜치 파이프라인에만 영향을 주며 머지 리퀘스트 파이프라인에는 영향을 주지 않습니다. | git push -o ci.variable="MAX_RETRIES=10" -o ci.variable="MAX_TIME=600" |
ci.no_pipeline |
최신 푸시에 대한 모든 파이프라인 생성을 방지합니다. | git push -o ci.no_pipeline |
통합을 위한 푸시 옵션#
푸시 옵션을 사용하여 통합 CI/CD 파이프라인을 건너뛸 수 있습니다.
| 푸시 옵션 | 설명 | 예시 |
|---|---|---|
integrations.skip_ci |
Atlassian Bamboo, Buildkite, Drone, Jenkins, JetBrains TeamCity와 같은 CI/CD 통합의 푸시 이벤트를 건너뜁니다. GitLab 16.2에서 도입되었습니다. | git push -o integrations.skip_ci |
머지 리퀘스트를 위한 푸시 옵션#
Git 푸시 옵션은 변경 사항을 푸시하면서 머지 리퀘스트에 대한 작업을 수행할 수 있습니다:
| 푸시 옵션 | 설명 |
|---|---|
merge_request.create |
푸시된 브랜치에 대한 새 머지 리퀘스트를 생성합니다. 기본 브랜치에서 푸시할 때 머지 리퀘스트를 생성하려면 merge_request.target 옵션을 사용하여 대상 브랜치를 지정해야 합니다. |
merge_request.target=<branch_name> |
머지 리퀘스트의 대상을 특정 브랜치로 설정합니다. 예: git push -o merge_request.target=branch_name. 기본 브랜치에서 머지 리퀘스트를 생성할 때 필수입니다. |
merge_request.target_project=<project> |
머지 리퀘스트의 대상을 특정 업스트림 프로젝트로 설정합니다. 예: git push -o merge_request.target_project=path/to/project. GitLab 16.6에서 도입되었습니다. |
merge_request.merge_when_pipeline_succeeds |
GitLab 17.11에서 auto_merge 옵션을 위해 지원 중단되었습니다. |
merge_request.auto_merge |
머지 리퀘스트를 자동 머지로 설정합니다. |
merge_request.remove_source_branch |
머지될 때 소스 브랜치를 제거하도록 머지 리퀘스트를 설정합니다. |
merge_request.squash |
머지 시 모든 커밋을 단일 커밋으로 스쿼시하도록 머지 리퀘스트를 설정합니다. GitLab 17.2에서 도입되었습니다. |
merge_request.title="<title>" |
머지 리퀘스트 제목을 설정합니다. 예: git push -o merge_request.title="The title I want". |
merge_request.description="<description>" |
머지 리퀘스트 설명을 설정합니다. 예: git push -o merge_request.description="The description I want". |
merge_request.draft |
머지 리퀘스트를 초안으로 표시합니다. 예: git push -o merge_request.draft. |
merge_request.milestone="<milestone>" |
머지 리퀘스트의 마일스톤을 설정합니다. 예: git push -o merge_request.milestone="3.0". |
merge_request.label="<label>" |
머지 리퀘스트에 레이블을 추가합니다. 레이블이 없으면 생성됩니다. 예를 들어 두 개의 레이블: git push -o merge_request.label="label1" -o merge_request.label="label2". |
merge_request.unlabel="<label>" |
머지 리퀘스트에서 레이블을 제거합니다. 예를 들어 두 개의 레이블: git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2". |
merge_request.assign="<user>" |
머지 리퀘스트에 사용자를 할당합니다. 사용자명 또는 사용자 ID를 허용합니다. 예를 들어 두 명의 사용자: git push -o merge_request.assign="user1" -o merge_request.assign="user2". |
merge_request.unassign="<user>" |
머지 리퀘스트에서 할당된 사용자를 제거합니다. 사용자명 또는 사용자 ID를 허용합니다. 예를 들어 두 명의 사용자: git push -o merge_request.unassign="user1" -o merge_request.unassign="user2". |
시크릿 푸시 보호를 위한 푸시 옵션#
푸시 옵션을 사용하여 시크릿 푸시 보호를 건너뛸 수 있습니다.
| 푸시 옵션 | 설명 | 예시 |
|---|---|---|
secret_push_protection.skip_all |
이 푸시의 모든 커밋에 대해 시크릿 푸시 보호를 수행하지 않습니다. | git push -o secret_push_protection.skip_all |
보안 정책을 위한 푸시 옵션#
푸시 옵션을 사용하여 보안 정책을 우회할 수 있습니다.
| 푸시 옵션 | 설명 | 예시 |
|---|---|---|
security_policy.bypass_reason |
보안 정책의 우회 이유를 설정합니다. | git push -o security_policy.bypass_reason="Hot fix" |
GitGuardian 통합을 위한 푸시 옵션#
GitGuardian 시크릿 감지를 건너뛰기 위해 시크릿 푸시 보호와 동일한 푸시 옵션을 사용할 수 있습니다.
| 푸시 옵션 | 설명 | 예시 |
|---|---|---|
secret_detection.skip_all |
GitLab 17.2에서 지원 중단되었습니다. 대신 secret_push_protection.skip_all을 사용하세요. |
git push -o secret_detection.skip_all |
secret_push_protection.skip_all |
GitGuardian 시크릿 감지를 수행하지 않습니다. | git push -o secret_push_protection.skip_all |
푸시 옵션 형식#
푸시 옵션에 공백이 포함된 텍스트가 필요한 경우 텍스트를 큰따옴표(")로 묶으세요. 공백이 없으면 따옴표를 생략할 수 있습니다. 몇 가지 예시:
git push -o merge_request.label="Label with spaces"
git push -o merge_request.label=Label-with-no-spaces
여러 작업을 한 번에 수행하기 위해 푸시 옵션을 결합하려면 여러 -o(또는 --push-option) 플래그를 사용합니다. 이 명령은 새 머지 리퀘스트를 생성하고, 브랜치(my-target-branch)를 대상으로 하며, 자동 머지를 설정합니다:
git push -o merge_request.create -o merge_request.target=my-target-branch -o merge_request.auto_merge
다른 브랜치를 대상으로 하는 기본 브랜치에서 새 머지 리퀘스트를 생성하려면:
git push -o merge_request.create -o merge_request.target=feature-branch
푸시를 위한 Git 별칭 생성#
Git 명령에 푸시 옵션을 추가하면 명령이 매우 길어질 수 있습니다. 동일한 푸시 옵션을 자주 사용하는 경우 Git 별칭을 만드세요. Git 별칭은 더 긴 Git 명령의 커맨드 라인 단축키입니다.
자동 머지 Git 푸시 옵션에 대한 Git 별칭을 생성하고 사용하려면:
-
터미널 창에서 다음 명령을 실행합니다:
git config --global alias.mwps "push -o merge_request.create -o merge_request.target=main -o merge_request.auto_merge" -
별칭을 사용하여 기본 브랜치(
main)를 대상으로 하고 자동 머지되는 로컬 브랜치를 푸시하려면 다음 명령을 실행합니다:git mwps origin <local-branch-name>
