변경 사항 단계 지정, 커밋 및 푸시
저장소의 파일을 변경하면 Git은 체크아웃된 브랜치의 가장 최근 버전과 변경 사항을 추적합니다. 브랜치에서 변경 사항을 검토하고 커밋하며, GitLab에 작업을 푸시하려면 Git 명령을 사용할 수 있습니다.
로컬 변경 사항 추가 및 커밋
브랜치에 변경 사항을 기록할 준비가 되면, 커밋할 수 있습니다. 커밋에는 변경 사항에 대한 정보를 기록하는 주석이 포함되며, 일반적으로 브랜치의 새로운 팁이 됩니다.
Git은 이동, 변경 또는 삭제된 파일을 커밋에 자동으로 포함하지 않습니다. 이렇게 하면 임시 디렉터리와 같은 변경 사항이나 파일이 실수로 포함되는 것을 방지할 수 있습니다. 커밋에 변경 사항을 포함하려면 git add
로 스테이징하세요.
변경 사항을 스테이징하고 커밋하려면:
-
저장소에서 추가할 각 파일 또는 디렉터리에 대해
git add <파일 이름 또는 경로>
를 실행하세요.현재 작업 디렉터리의 모든 파일을 스테이징하려면
git add .
를 실행하세요. -
파일이 스테이징에 추가되었는지 확인합니다:
git status
파일은 초록색으로 표시됩니다.
-
스테이징된 파일을 커밋하려면:
git commit -m "<변경 사항을 설명하는 주석>"
변경 사항이 브랜치에 커밋됩니다.
모든 변경 사항 커밋
모든 변경 사항을 스테이징하고 한 번의 명령으로 커밋할 수 있습니다:
git commit -a -m "<변경 사항을 설명하는 주석>"
원치 않는 파일이 원격 저장소에 기록되지 않도록 주의하세요. 일반적으로 커밋하기 전에 로컬 저장소의 상태를 항상 확인하세요.
변경 사항을 GitLab에 전송
모든 로컬 변경 사항을 원격 저장소로 푸시하려면:
git push <remote> <브랜치 이름>
예를 들어, 로컬 커밋을 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 변수를 전달할 수 있습니다.
푸시 옵션 | 설명 | 예시 |
---|---|---|
ci.skip |
최신 푸시에 대해 CI/CD 파이프라인을 생성하지 않습니다. 브랜치 파이프라인만 건너뛰며 병합 요청 파이프라인은 건너뛰지 않습니다. Jenkins와 같은 CI/CD 통합의 파이프라인을 건너뛰지 않습니다. | git push -o ci.skip |
ci.variable="<name>=<value>" |
푸시로 인해 생성된 CI/CD 파이프라인에 CI/CD 변수를 제공합니다. 브랜치 파이프라인에만 변수를 전달하며 병합 요청 파이프라인에는 전달하지 않습니다. | git push -o ci.variable="MAX_RETRIES=10" -o ci.variable="MAX_TIME=600" |
통합을 위한 푸시 옵션
푸시 옵션을 사용하여 통합 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=<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 |
병합 요청을 파이프라인이 성공할 때 병합로 설정합니다. |
merge_request.remove_source_branch |
병합될 때 소스 브랜치를 제거하도록 병합 요청을 설정합니다. |
merge_request.squash |
병합 시 모든 커밋을 단일 커밋으로 압축하도록 병합 요청을 설정합니다. GitLab 17.2에서 도입되었습니다. |
merge_request.title="<title>" |
병합 요청의 제목을 설정합니다. 예: git push -o merge_request.title="내가 원하는 제목" . |
merge_request.description="<description>" |
병합 요청의 설명을 설정합니다. 예: git push -o merge_request.description="내가 원하는 설명" . |
merge_request.draft |
병합 요청을 초안으로 표시합니다. 예: git push -o merge_request.draft . GitLab 15.0에서 도입되었습니다. |
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" . 사용자 이름 지원은 GitLab 15.5에서 추가되었습니다. |
merge_request.unassign="<user>" |
병합 요청에서 할당된 사용자를 제거합니다. 사용자 이름 또는 사용자 ID를 허용합니다. 두 개의 사용자 예: git push -o merge_request.unassign="user1" -o merge_request.unassign="user2" . 사용자 이름 지원은 GitLab 15.5에서 추가되었습니다. |
비밀 푸시 보호를 위한 푸시 옵션
푸시 옵션을 사용하여 비밀 푸시 보호를 건너뛸 수 있습니다.
푸시 옵션 | 설명 | 예시 |
---|---|---|
secret_push_protection.skip_all |
이 푸시의 모든 커밋에 대해 비밀 푸시 보호를 수행하지 않습니다. | git push -o secret_push_protection.skip_all |
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.merge_when_pipeline_succeeds
Git 푸시를 위한 별칭 생성
Git 명령에 푸시 옵션을 추가하면 매우 긴 명령이 생성될 수 있습니다. 동일한 푸시 옵션을 자주 사용하는 경우, 해당 옵션에 대한 Git 별칭을 만들 수 있습니다. Git 별칭은 긴 Git 명령에 대한 명령줄 단축키입니다.
파이프라인이 성공할 때 병합 푸시 옵션을 위한 Git 별칭을 생성하고 사용하는 방법:
-
터미널 창에서 다음 명령을 실행하세요:
git config --global alias.mwps "push -o merge_request.create -o merge_request.target=main -o merge_request.merge_when_pipeline_succeeds"
-
기본 브랜치(
main
)를 타겟으로 하고 자동 병합하는 로컬 브랜치를 푸시하기 위해 별칭을 사용하려면 이 명령을 실행하세요:git mwps origin <local-branch-name>