명령 줄 Git

Git은 오픈 소스 분산 버전 관리 시스템입니다. GitLab은 Git 기반으로 구축되었습니다.

GitLab에서 직접 많은 Git 작업을 수행할 수 있습니다. 그러나 복잡한 Merge 충돌을 해결하거나 커밋을 롤백하는 고급 작업과 같은 작업에는 명령 줄이 필요합니다.

Git에 익숙하지 않고 자신의 프로젝트에서 작업하면서 배우고 싶다면, 첫 번째 커밋하는 방법을 배우세요.

Git 명령의 빠른 참조를 위해 Git Cheat Sheet를 다운로드하세요.

Git 및 GitLab 작업의 장점에 대한 자세한 정보는 다음을 참조하세요:

로컬에서 수행 중인 작업을 시각화하려면 Git GUI 앱을 설치할 수 있습니다.

터미널 선택

컴퓨터에서 Git 명령을 실행하려면 터미널(명령 프롬프트, 명령 셸, 명령 줄로도 불림)을 열어야 합니다. 다음과 같은 옵션이 있습니다:

  • macOS 사용자:
    • 내장 터미널. ⌘ command + space를 누르고 터미널이라고 입력합니다.
    • iTerm2. ZshOh My Zsh와 통합하여 색상 강조 및 기타 고급 기능을 사용할 수 있습니다.
  • Windows 사용자:
    • 내장 명령줄. Windows 작업 표시줄에서 검색 아이콘을 선택하고 cmd라고 입력합니다.
    • PowerShell.
    • Git Bash. Git for Windows에 기본 포함되어 있습니다.
  • Linux 사용자:

Git 설치 확인

Git이 이미 컴퓨터에 설치되어 있는지 확인하려면 터미널을 열고 다음 명령을 실행하세요:

git --version

Git이 설치되어 있다면 출력은 다음과 같습니다:

git version X.Y.Z

컴퓨터에서 git을 명령으로 인식하지 못하는 경우 Git을 설치해야 합니다.

Git 구성

컴퓨터에서 Git을 사용하려면 작업의 작성자로서 본인을 식별하기 위해 자격 증명을 입력해야 합니다. 전체 이름과 이메일 주소는 GitLab에서 사용하는 것과 일치해야 합니다.

  1. 셸에서 전체 이름을 추가하세요:

    git config --global user.name "John Doe"
    
  2. 이메일 주소를 추가하세요:

    git config --global user.email "your_email_address@example.com"
    
  3. 구성을 확인하려면 다음을 실행하세요:

    git config --global --list
    

    --global 옵션은 Git에게 시스템에서 수행하는 모든 작업에 항상 이 정보를 사용하도록 지시합니다. --global을 제외하거나 --local을 사용하면 구성이 현재 리포지터리에만 적용됩니다.

Git이 구성을 어떻게 관리하는지에 대한 자세한 내용은 Git 구성 문서를 참조하세요.

리포지터리 선택

시작하기 전에 작업할 리포지터리를 선택하세요. GitLab.com이나 다른 GitLab 인스턴스에서 액세스 권한이 있는 프로젝트를 사용할 수 있습니다.

이 페이지에서의 예시에 사용할 리포지터리를 선택하려면:

  1. https://gitlab.com/gitlab-tests/sample-project/로 이동합니다.
  2. 오른쪽 상단에서 포크(Fork)를 선택합니다.
  3. 포크할 네임스페이스를 선택합니다.

프로젝트는 https://gitlab.com/<your-namespace>/sample-project/에서 사용할 수 있게 됩니다.

액세스할 수 있는 모든 프로젝트를 포크할 수 있습니다.

리포지터리 복제

리포지터리를 복제하면 원격 리포지터리의 파일이 컴퓨터로 다운로드되고 연결이 설정됩니다.

이 연결에는 자격 증명을 추가해야 합니다. SSH 또는 HTTPS를 사용할 수 있습니다. SSH를 권장합니다.

SSH로 복제

한 번만 인증하려면 SSH로 복제합니다.

  1. SSH 문서의 지침에 따라 GitLab에 인증합니다.
  2. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 복제하려는 프로젝트를 찾습니다.
  3. 프로젝트 개요 페이지에서 오른쪽 상단에서 코드를 선택하고 SSH로 복제의 URL을 복사합니다.
  4. 터미널을 열고 파일을 복제할 디렉터리로 이동합니다. Git은 자동으로 리포지터리 이름의 폴더를 만들고 파일을 다운로드합니다.
  5. 다음 명령을 실행합니다:

    git clone git@gitlab.com:gitlab-tests/sample-project.git
    
  6. 파일을 보려면 새 디렉터리로 이동합니다:

    cd sample-project
    

또한 리포지터리를 복제하고 Visual Studio Code에서 직접 엽니다.

HTTPS로 복제

각 작업을 수행할 때마다 인증하려면 HTTPS로 복제합니다. 매끄러운 경험을 위해 OAuth 자격 증명 도우미를 사용할 수 있습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 복제하려는 프로젝트를 찾습니다.
  2. 프로젝트 개요 페이지에서 오른쪽 상단에서 코드를 선택하고 HTTPS로 복제의 URL을 복사합니다.
  3. 터미널을 열고 파일을 복제할 디렉터리로 이동합니다.
  4. 다음 명령을 실행합니다. Git은 자동으로 리포지터리 이름의 폴더를 만들고 파일을 다운로드합니다.

    git clone https://gitlab.com/gitlab-tests/sample-project.git
    
  5. GitLab에서 사용자 이름과 암호를 요청합니다.

    계정에 2단계 인증(2FA)이 활성화된 경우 계정 암호를 사용할 수 없습니다. 대신 다음 중 하나를 수행할 수 있습니다:

    2FA를 활성화하지 않은 경우 계정 암호를 사용합니다.

  6. 파일을 보려면 새 디렉터리로 이동합니다:

    cd sample-project
    
note
Windows에서 비밀번호를 여러 번 잘못 입력하여 “액세스 거부” 메시지가 표시되는 경우, 네임스페이스(사용자 이름 또는 그룹)을 경로에 추가하세요: git clone https://namespace@gitlab.com/gitlab-org/gitlab.git.

토큰을 사용하여 복제

2FA를 사용하려는 경우 또는 하나 이상의 리포지터리에 대해 범위가 지정된 취소 가능한 자격 증명을 사용하려는 경우 HTTPS를 사용하여 토큰을 이용하여 복제하세요.

HTTPS를 통해 복제할 때 이러한 토큰을 사용할 수 있습니다.

git clone https://<사용자명>:<토큰>@gitlab.example.com/tanuki/awesome_project.git

로컬 디렉터리를 리포지터리로 변환

로컬 폴더를 초기화하여 Git이 해당 폴더를 리포지터리로 추적하도록 할 수 있습니다.

  1. 변환하려는 디렉터리에서 터미널을 엽니다.
  2. 다음 명령을 실행하세요.

    git init
    

    .git 폴더가 디렉터리에 생성됩니다. 이 폴더에는 Git 레코드와 구성 파일이 포함되어 있습니다. 이러한 파일을 직접 편집해서는 안됩니다.

  3. 파일을 올바른 프로젝트로 업로드할 수 있도록 원격 리포지터리에 대한 경로를 추가하세요.

원격 리포지터리 추가

특정 로컬 폴더에 연결된 GitLab의 원격 리포지터리를 나타내려면 “원격”을 추가하세요. 이렇게 하면 Git에게 푸시하거나 풀 위치를 알려줄 수 있습니다.

로컬 복사본에 원격을 추가하려면:

  1. GitLab에서 프로젝트를 만든 다음 파일을 저장할 프로젝트를 만드세요.
  2. 이 프로젝트의 홈페이지로 이동하여 기존 폴더 푸시로 스크롤하고, git remote add로 시작하는 명령을 복사하세요.
  3. 컴퓨터에서 초기화한 디렉터리에서 터미널을 열고 복사한 명령을 붙여넣고 Enter를 누르세요.

    git remote add origin git@gitlab.com:username/projectpath.git
    

이후에 파일을 스테이징하고 GitLab로 업로드할 수 있습니다.

원격 리포지터리보기

원격 리포지터리를 보려면 다음 명령을 입력하세요.

git remote -v

-v 플래그는 자세한 정보를 표시합니다.

프로젝트의 최신 변경 사항 다운로드

프로젝트의 최신 변경 사항을 작업하려면, 마지막으로 프로젝트를 복제하거나 풀한 이후부터 사용자들에의해 수행된 모든 변경 사항을 받기 위해 pull합니다. <name-of-branch>를 여러분의 기본 브랜치의 이름으로 바꾸어주시거나 현재 작업 중인 브랜치의 이름으로 변경하세요.

git pull <REMOTE> <name-of-branch>

리포지터리를 복제할 때, REMOTE는 보통 origin입니다. 이것은 리포지터리가 복제된 위치이며, 원격 서버의 리포지터리의 SSH 또는 HTTPS URL을 나타냅니다. <name-of-branch>는 보통 여러분의 기본 브랜치의 이름이지만, 다른 기존 브랜치일 수 있습니다. 필요에 따라 추가적인 명명된 리모트와 브랜치를 생성할 수 있습니다.

Git이 리모트 리포지터리를 관리하는 방법에 대해 더 알아보세요. Git 원격 문서에서 더 많은 정보를 얻을 수 있습니다.

원격에 다른 URL 추가

각 푸시마다 두 개의 원격이 업데이트되도록 다른 URL을 원격에 추가하세요.

git remote set-url --add <remote_name> <remote_url>

Git 참조의 변경 사항 표시

Git 참조는 특정 커밋을 나타내는 이름이거나 다른 참조를 가리킬 수 있는 이름입니다. HEAD 참조는 특별합니다. 보통 현재 작업 중인 브랜치의 맨 위를 가리킵니다.

$ git show HEAD
commit ab123c (HEAD -> main, origin/main, origin/HEAD)

로컬 리포지터리에서 참조가 변경되면, Git은 그 변경 사항을 참조 로그에 기록합니다. 참조의 이전 값들을 찾는 경우 참조 로그의 내용을 표시할 수 있습니다. 예를 들어 변경을 되돌리기 위해 HEAD의 변경 사항을 표시하려면 이 명령을 사용할 수 있습니다.

HEAD의 변경 사항 디렉터리을 표시하려면:

git reflog

파일의 Git 이력 확인

파일의 Git 이력을 확인하는 기본 명령:

git log <file>

다음과 같은 오류 메시지를 받으면:

fatal: ambiguous argument <file_name>: unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:

다음 명령으로 파일의 Git 이력을 확인하세요:

git log -- <file>

파일의 각 변경 내용 확인

gitk <file>

브랜치

브랜치는 리포지터리의 파일을 복제한 것입니다. 다른 브랜치에 영향을 주지 않고 브랜치에서 작업할 수 있습니다. 변경 사항을 메인 코드베이스에 추가하기 위해 브랜치를 기본 브랜치(예: main)에 Merge할 수 있습니다.

브랜치를 생성할 때 사용하세요:

  • 프로젝트에 코드를 추가하고 있는데 이것이 올바르게 작동하는지 확신이 없을 때.
  • 다른 사람들과 프로젝트를 협업하고 있고, 여러분의 작업이 섞이지 않도록 하고 싶을 때.

새로운 브랜치는 일반적으로 기본 브랜치와 구분하기 위해 피처 브랜치라고 합니다.

브랜치 생성

피처 브랜치를 생성하려면:

git checkout -b <name-of-branch>

GitLab은 문제가 발생하는 것을 방지하기 위해 브랜치 이름 규칙을 강제하며, 머지 요청 생성을 간소화하기 위해 브랜치 이름 패턴을 제공합니다.

브랜치로 전환

Git의 모든 작업은 브랜치에서 수행됩니다. 파일의 상태를 보고 해당 브랜치에서 작업할 수 있습니다.

기존 브랜치로 전환하려면:

git checkout <name-of-branch>

예를 들어, main 브랜치로 전환하려면:

git checkout main

차이점 보기

로컬 미스테이징되지 않은 변경 사항과 최신 버전 사이의 차이를 보려면:

git diff

변경된 파일 보기

파일이나 폴더를 추가, 변경 또는 삭제하면 Git이 해당 변경 사항을 파악합니다. 어떤 파일이 변경되었는지 확인하려면:

git status

로컬 변경 내용 추가 및 커밋하기

git status를 입력하면 로컬에서 변경된 파일이 빨간색으로 표시됩니다. 이러한 변경 사항은 새 파일, 수정된 파일 또는 삭제된 파일일 수 있습니다.

  1. 파일을 커밋 대상으로 지정하려면:

    git add <파일 이름 또는 폴더 이름>
    
  2. 추가할 파일 또는 폴더마다 단계 1을 반복합니다. 또는 현재 디렉터리와 하위 디렉터리의 모든 파일을 스테이징하려면 git add .를 입력합니다.

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

    git status
    

    파일은 초록색으로 표시되어야 합니다.

  4. 스테이징된 파일을 커밋하려면:

    git commit -m "커밋의 의도를 설명하는 주석"
    

모든 변경 사항을 스테이징하고 커밋하기

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

git commit -a -m "커밋의 의도를 설명하는 주석"

변경 사항을 GitLab에 전송

로컬 변경 사항을 원격 리포지터리로 전송하려면:

git push <원격> <브랜치 이름>

예를 들어 로컬 커밋을 origin 원격 리포지터리의 main 브랜치에 전송하려면:

git push origin main

때때로 Git은 리포지터리로의 푸시를 허용하지 않을 수 있습니다. 대신에 업데이트를 강제해야 할 수 있습니다.

브랜치에서 모든 변경 사항 삭제

추적 중인 파일의 모든 변경 사항을 삭제하려면:

git checkout .

이 작업은 파일의 변경 사항을 제거하는 것이지 파일 자체를 제거하는 것은 아닙니다. 추적되지 않은 (새로운) 파일은 변경되지 않습니다.

스테이징 영역에 추가된 모든 변경 사항을 스테이징 해제

커밋되지 않은 모든 파일을 스테이징에서 제거하려면:

git reset

가장 최근 커밋 되돌리기

가장 최근의 커밋을 되돌리려면:

git reset HEAD~1

이 작업은 변경된 파일과 폴더를 로컬 리포지터리에서 스테이징되지 않은 상태로 남깁니다.

caution
이미 원격 리포지터리에 푸시한 경우 Git 커밋을 되돌리지 말아야 합니다. 커밋을 되돌릴 수는 있지만, 상황 자체를 주의 깊게 처리하여 피하는 것이 최선입니다.

Git 변경 취소 문서에서 Git이 변경을 되돌리는 다양한 방법에 대해 더 알아볼 수 있습니다.

브랜치를 기본 브랜치로 Merge

변경 사항을 기본 브랜치에 추가할 준비가 되면, 기능 브랜치를 해당 브랜치에 Merge합니다:

git checkout <기본 브랜치>
git merge <기능 브랜치>

GitLab에서는 보통 커맨드 라인을 사용하는 대신 Merge Request을 사용하여 변경 사항을 Merge합니다.

포크에서 상위 리포지터리로 Merge Request을 생성하려면 포크 워크플로를 참조하세요.

기록된 결의 사항 재사용

기록된 결의 사항을 _재사용_하려면:

git rerere

rerere 기능을 활성화하려면:

git config --global rerere.enabled true

명령줄을 통한 Git의 고급 사용

보다 고급 기술을 소개한 Git에 대해 알아보려면 Git rebase, force-push 및 Merge 충돌을 참조하세요.

포크된 리포지터리에서의 변경 사항을 최상위 리포지터리와 동기화

리포지터리의 사본을 만들려면 포크하세요. 리포지터리의 사본에서의 변경 사항은 자동으로 원본과 동기화되지 않습니다. 프로젝트를 원본 프로젝트와 동기화하려면 원본 리포지터리에서 pull해야 합니다.

원본 리포지터리에서 변경 사항을 pull하려면 원격 리포지터리에 대한 링크를 생성해야 합니다. 이 원격 리포지터리를 보통 upstream이라고 하며, 이를 사용하여 원본 리포지터리에서 새로운 업데이트를 받을 수 있습니다. 그리고 origin을 사용하여 로컬 변경 사항을 푸시하고 Merge Request을 생성합니다.