명령 줄 Git

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

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

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

Git 명령의 간단한 참조를 원하신다면, Git Cheat Sheet를 다운로드하세요.

Git 및 GitLab 작업의 이점에 대한 자세한 내용은 다음을 참조하세요:

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

터미널 선택

컴퓨터에서 Git 명령을 실행하려면 터미널(명령 프롬프트, 명령 셸, 명령 줄이라고도 함)을 열어야 합니다. 다음은 몇 가지 옵션입니다:

  • macOS 사용자:
    • 기본 터미널입니다. ⌘ command + space를 누르고 terminal을 입력합니다.
    • 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. 오른쪽 상단에서 퍼킹하기를 선택하세요.
  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에서 열 수 있습니다(../user/project/repository/index.md에서 열고 복제하기).

HTTPS로 복제하기

컴퓨터와 GitLab 간의 작업을 수행할 때마다 매번 인증하려면 HTTPS로 복제하세요. OAuth 자격 증명 도우미를 사용하면 수동으로 인증해야 하는 횟수를 줄일 수 있어 HTTPS를 원활한 경험으로 만들 수 있습니다.

  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
    

참고: Windows에서 암호를 잘못 입력하여 여러 번 액세스 거부 메시지가 나타나는 경우, 네임스페이스(사용자 이름 또는 그룹)를 경로에 추가합니다: git clone https://namespace@gitlab.com/gitlab-org/gitlab.git.

토큰을 사용하여 복제

HTTPS를 통해 토큰을 사용하여 복제하려면:

  • 2단계 인증(2FA)을 사용하려면.
  • 하나 이상의 리포지토리에 대해 스코프 지정을 받은 취소 가능한 자격 증명 세트를 사용하려면.

다음 중 하나의 토큰을 사용하여 HTTPS를 통해 복제할 수 있습니다:

git clone https://<username>:<token>@gitlab.example.com/tanuki/awesome_project.git

로컬 디렉토리를 리포지토리로 변환하기

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

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

    git init
    

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

  3. Git이 파일을 올바른 프로젝트로 업로드할 수 있도록 원격 리포지토리의 경로를 추가합니다.

원격 리포지토리 추가

특정 로컬 폴더에 연결된 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 플래그는 자세히(verbose)를 나타냅니다.

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

프로젝트의 최신 버전을 작업하기 위해 사용자가 마지막으로 프로젝트를 복제하거나 가져온 이후 사용자들이 만든 모든 변경 사항을 가져오려면 pull을 수행합니다. <name-of-branch>기본 브랜치의 이름으로 바꿔서 사용하여 주요 브랜치 코드를 가져오거나, 현재 작업 중인 브랜치의 브랜치 이름으로 바꿔주세요.

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

저장소를 복제할 때, REMOTE은 일반적으로 origin입니다. 이것은 저장소가 복제된 위치로 원격 서버의 SSH 또는 HTTPS URL을 나타냅니다. <name-of-branch>은 일반적으로 기본 브랜치의 이름이지만, 기존 브랜치일 수도 있습니다. 필요에 따라 추가로 명명된 원격 및 브랜치를 만들 수 있습니다.

Git이 원격 저장소를 관리하는 방법에 대해 자세히 알아보려면 Git Remote 문서를 참조하세요.

원격에 다른 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과 같은 기본 브랜치로 브랜치를 병합할 수 있습니다.

브랜치를 사용하는 경우:

  • 프로젝트에 코드를 추가하려고 하지만 제대로 작동하는지 확실하지 않은 경우.
  • 기타 사람들과 프로젝트를 협업하면서 작업이 섞이지 않도록 하려는 경우.

새로운 브랜치는 종종 기능 브랜치라고 불립니다. 이는 기본 브랜치와 구분하기 위한 것입니다.

브랜치 만들기

기능 브랜치를 만들려면:

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 <file-name OR folder-name>
    
  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

이 작업은 변경된 파일과 폴더를 로컬 저장소에 스테이징하지 않은 상태로 남깁니다.

경고: 이미 원격 저장소에 푸시한 경우 Git 커밋을 되돌리지 마십시오. 커밋을 되돌릴 수는 있지만, 가장 좋은 방법은 신중하게 작업하여 상황을 피하는 것입니다.

Git이 변경 사항을 되돌리는 다양한 방법에 대해 더 알아보려면 Git 변경 취소 문서를 확인하세요.

기본 브랜치와 브랜치 병합

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

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

GitLab에서 명령행을 사용하는 대신 변경 사항을 병합하려면 일반적으로 병합 요청를 사용합니다.

포크에서 원본 저장소로 병합 요청을 생성하려면 포킹 워크플로우를 참조하세요.

기록된 해결 방법 재사용

기록된 해결 방법을 _재사용_하려면:

git rerere

rerere 기능을 활성화하려면:

git config --global rerere.enabled true

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

더 고급 기술에 대한 소개를 보려면 Git rebase, force-push, and merge conflicts를 확인하세요.

포크된 저장소 내의 변경 사항 동기화

당신의 네임스페이스에 저장소의 사본을 만들려면 포크하세요. 저장소의 복사본에 대한 변경 사항이 자동으로 원본과 동기화되지 않습니다. 프로젝트를 원본 프로젝트와 동기화하려면 원본 저장소에서 pull해야 합니다.

원본 저장소에서 변경 사항을 pull하기 위해 리모트 저장소에 링크를 만들어야 합니다. 이 리모트 저장소를 일반적으로 upstream이라고 부릅니다.

이제 upstream을 사용하여 원본 저장소로부터 새로운 업데이트를 pull하고, origin을 사용하여 로컬 변경 사항을 푸시하고 병합 요청을 생성할 수 있습니다.