Stage, commit, and push changes

파일을 변경할 때 Git은 변경 사항을 체크아웃된 브랜치의 가장 최근 버전에 대해 추적합니다. Git 명령을 사용하여 변경 사항을 검토하고 브랜치에 커밋하고 GitLab으로 작업을 푸시할 수 있습니다.

변경 사항 추가 및 커밋

브랜치에 변경 사항을 기록할 준비가 되면 커밋할 수 있습니다. 커밋에는 변경 사항에 대한 정보를 기록하는 코멘트가 포함되며 보통 새로운 브랜치의 끝이 됩니다.

Git은 파일을 이동, 변경 또는 삭제한 내용을 커밋에 자동으로 포함시키지 않습니다. 이는 실수로 변경 사항이나 파일을 포함시키는 것을 방지합니다. 커밋에 변경 사항을 포함시키려면 git add로 스테이징해야 합니다.

변경 사항을 스테이징하고 커밋하려면:

  1. 귀하의 저장소에서 추가하려는 각 파일 또는 디렉토리에 대해 git add <파일 이름 또는 경로>를 실행합니다.

    현재 작업 디렉토리의 모든 파일을 스테이징하려면 git add .를 실행합니다.

  2. 파일이 스테이징되었는지 확인합니다:

    git status
    

    파일이 초록색으로 표시됩니다.

  3. 스테이징된 파일을 커밋합니다:

    git commit -m "<변경 사항을 설명하는 코멘트>"
    

변경 사항이 브랜치에 커밋됩니다.

모든 변경 사항 커밋

모든 변경 사항을 스테이징하고 한 번에 커밋할 수 있습니다:

git commit -a -m "<변경 사항을 설명하는 코멘트>"

커밋에 원격 저장소에 기록하고 싶지 않은 파일이 포함되지 않도록 주의하세요. 항상 변경 사항을 커밋하기 전에 로컬 저장소의 상태를 확인하세요.

변경 사항 GitLab으로 전송

모든 로컬 변경 사항을 원격 저장소로 푸시하려면:

git push <원격 저장소> <브랜치 이름>

예를 들어, 로컬 커밋을 origin 원격 저장소의 main 브랜치로 푸시하려면:

git push origin main

가끔 Git은 저장소로 푸시할 수 없도록 합니다. 대신 강제 업데이트를 해야 할 수 있습니다.

푸시 옵션

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

브랜치로 변경 사항을 푸시할 때, 클라이언트 측 Git 푸시 옵션을 사용할 수 있습니다. Git 2.10 이상에서는 Git 푸시 옵션을 사용하여 다음을 수행할 수 있습니다:

Git 2.18 이상에서는 긴 형식(--push-option) 또는 짧은 형식(-o)을 사용할 수 있습니다:

git push -o <푸시_옵션>

Git 2.10에서 2.17까지는 반드시 긴 형식을 사용해야 합니다:

git push --push-option=<푸시_옵션>

서버 측 제어 및 모범 사례 강제 수행을 위해서는 푸시 규칙서버 후크를 참조하세요.

GitLab CI/CD를 위한 푸시 옵션

푸시 옵션을 사용하여 CI/CD 파이프라인 건너띄기 또는 CI/CD 변수 전달할 수 있습니다.

참고: 푸시 옵션은 병합 요청 파이프라인에는 사용할 수 없습니다. 자세한 정보는 이슈 373212를 참조하세요.

푸시 옵션 설명 예시
ci.skip 최신 푸시에 대한 CI/CD 파이프라인을 생성하지 않습니다. 브랜치 파이프라인만 건너뜁니다. 병합 요청 파이프라인은 건너뛰지 않습니다. 이는 Jenkins와 같은 CI/CD 통합에는 적용되지 않습니다. git push -o ci.skip
ci.variable="<이름>=<값>" 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=<브랜치_이름> 병합 요청의 대상을 특정 브랜치로 설정합니다. 예: git push -o merge_request.target=branch_name.
merge_request.target_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="<제목>" 병합 요청의 제목을 설정합니다. 예: git push -o merge_request.title="원하는 제목".
merge_request.description="<설명>" 병합 요청의 설명을 설정합니다. 예: git push -o merge_request.description="원하는 설명".
merge_request.draft 병합 요청을 임시로 설정합니다. 예: git push -o merge_request.draft. GitLab 15.0에서 소개되었습니다.
merge_request.milestone="<마일스톤>" 병합 요청의 마일스톤을 설정합니다. 예: git push -o merge_request.milestone="3.0".
merge_request.label="<라벨>" 병합 요청에 라벨을 추가합니다. 라벨이 없는 경우 생성됩니다. 예: 두 개의 라벨을 추가하는 경우: git push -o merge_request.label="label1" -o merge_request.label="label2".
merge_request.unlabel="<라벨>" 병합 요청에서 라벨을 제거합니다. 두 개의 라벨의 경우: git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2".
merge_request.assign="<사용자>" 병합 요청에 사용자를 할당합니다. 사용자 이름 또는 사용자 ID를 사용합니다. 두 명의 사용자를 할당하는 경우: git push -o merge_request.assign="user1" -o merge_request.assign="user2". 사용자명 지원은 GitLab 15.5에서 추가되었습니다.
merge_request.unassign="<사용자>" 병합 요청에서 할당된 사용자를 제거합니다. 사용자명 또는 사용자 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 통합을 위한 푸시 옵션

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) 플래그를 사용합니다. 이 명령은 새로운 머지 요청을 생성하고, 브랜치를 대상으로 지정하며, 자동 머지를 설정합니다:

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 별칭을 생성하고 사용하는 방법:

  1. 터미널 창에서 이 명령을 실행합니다:

    git config --global alias.mwps "push -o merge_request.create -o merge_request.target=main -o merge_request.merge_when_pipeline_succeeds"
    
  2. 기본 브랜치(main)를 대상으로 하는 로컬 브랜치를 자동으로 머지하는 별칭을 사용하여 푸시하려면, 이 명령을 실행하세요:

    git mwps origin <로컬-브랜치-이름>
    

관련 주제