목표

우주를 테마로 한 자습서를 통해 Git의 기본 내용을 배워보세요.

미션 브리핑

여러분의 미션은 자습서를 완료하고 팀의 모든 우주 정거장을 추적하면서 Git에 익숙해지는 것입니다. 이 자습서에서 다루는 명령은 다음과 같습니다.

  • git clone, git config, git add, git status, git commit, git push, git pull, git branch, git checkout, and git merge
시간 관객 필수 조건
30분 Git 및 Bitbucket Cloud를 처음 사용하는 사용자 Git이 설치되어 있습니다.
Bitbucket 계정이 있습니다.

Git 리포지토리 만들기

새로운 Bitbucket 우주 정거장 관리자는 체계적으로 업무를 수행해야 합니다. 우주 정거장을 위한 파일을 만들 때는 파일을 한곳에 보관하고 우주 도처에 있는 팀원들과도 공유할 수 있어야 합니다. Bitbucket을 사용하면 모든 것을 리포지토리에 추가하여 그렇게 할 수 있습니다. 리포지토리를 만들어 보겠습니다!

  • 리포지토리에 관한 몇 가지 재미있는 사실

    • 한 파일에서 작업하든 여러 파일에서 작업하든, 로컬 리포지토리의 모든 파일에 액세스할 수 있습니다.
    • 공용 리포지토리에 대한 URL이 있는 경우 Bitbucket 계정이 없어도 공용 리포지토리를 볼 수 있습니다.
    • 각 리포지토리는 사용자 계정 또는 팀에 속합니다. 사용자 계정의 경우 사용자가 리포지토리를 소유합니다. + 팀의 경우 해당 팀이 소유합니다.
    • 리포지토리 소유자만 리포지토리를 삭제할 수 있습니다. 리포지토리가 팀에 속해 있다면 관리자가 리포지토리를 삭제할 수 있습니다.
    • 코드 프로젝트는 여러 계정의 여러 리포지토리로 구성되거나 한 계정의 1개 리포지토리일 수도 있습니다.
    • 각 리포지토리의 크기 제한은 2GB지만 리포지토리를 1GB 이하로 유지하는 것이 좋습니다.

1단계. 리포지토리 생성

처음에 Bitbucket에 만든 리포지토리에는 코드가 없이 비어 있습니다. 곧 파일을 추가하기 시작할 것이기 때문에 괜찮습니다. 이 Bitbucket 리포지토리는 사용자 파일의 중앙 리포지토리가 되며 권한을 제공할 경우 다른 사용자도 해당 리포지토리에 액세스할 수 있음을 의미합니다. 리포지토리를 만든 다음에는 로컬 시스템에 버전을 복사합니다. 그런 식으로 하나의 리포지토리에서 업데이트한 다음, 해당 변경 사항을 다른 리포지토리로 전송할 수 있습니다.

중앙 리포지토리에서 로컬 리포지토리

리포지토리를 만들려면 다음을 수행합니다.

  1. Bitbucket에서 전역 사이드바의 + 아이콘을 클릭하고 리포지토리를 선택합니다.

    리포지토리 메뉴 생성

    Bitbucket에 새 리포지토리 만들기 페이지가 표시됩니다. 천천히 대화 상자의 내용을 검토합니다. 리포지토리 유형을 제외하고 이 페이지에 입력한 모든 내용은 나중에 변경할 수 있습니다.

    리포지토리 생성

  2. 이름 필드에 BitbucketStationLocations를 입력합니다. Bitbucket에서는 리포지토리의 URL에 이 이름을 사용합니다. 예를 들어, the_best 사용자가 awesome_repo라는 리포지토리를 갖고 있는 경우 해당 리포지토리의 URL은 https://bitbucket.org/the_best/awesome_repo가 됩니다.

  3. 액세스 수준의 경우 개인 리포지토리 확인란을 선택 상태로 둡니다. 개인 리포지토리는 사용자 및 액세스 권한을 가진 사용자에게만 표시됩니다. 이 확인란을 선택 해제하면 모든 사용자가 리포지토리를 볼 수 있습니다.

  4. 리포지토리 유형으로 Git을 선택합니다. 리포지토리 만들기를 클릭한 후에는 리포지토리 유형을 변경할 수 없습니다.

  5. 리포지토리 만들기를 클릭합니다. Bitbucket에서 리포지토리를 만들고 리포지토리의 개요 페이지를 표시합니다.

2단계. 새 리포지토리 살펴보기

방금 만든 리포지토리를 천천히 살펴보세요. 리포지토리의 개요 페이지가 보여야 합니다.

리포지토리 개요

리포지토리의 일반적인 작업을 보려면 전역 사이드바에서 +를 클릭합니다. 탐색 사이드바에서 항목을 클릭하면 리포지토리 세부 정보 및 기타 설정을 업데이트하는 설정을 비롯하여 각 항목의 내용을 확인할 수 있습니다. 항목을 탐색하는 데 사용할 수 있는 단축키를 확인하려면 키보드에서 ? 키를 누릅니다.

사이드바에서 커밋 옵션을 클릭하면 아직 리포지토리의 내용을 만들지 않았으므로 커밋이 없는 것을 확인할 수 있습니다. 리포지토리가 개인 리포지토리이고 다른 사용자를 리포지토리에 초대하지 않았으므로, 리포지토리 소유자만 현재 리포지토리의 내용을 작성하거나 편집할 수 있습니다.

Git 리포지토리 복사 및 파일 추가

이제 스페이스 스테이션 파일을 추가하고 공유할 장소가 있으며 로컬 시스템에서 연결할 방식이 필요합니다. 이를 설정하기 위해 Bitbucket 리포지토리를 시스템에 복사하려고 합니다. Git은 "복제"로 리포지토리 복제를 참조합니다. 리포지토리를 복제하는 경우 Bitbucket 서버(Git에서 원본으로 알고 있음) 및 로컬 시스템 간 연결을 생성합니다.

원본에서 로컬

1단계. 리포지토리를 로컬 시스템에 복제

데스크톱에서 브라우저와 터미널 창을 엽니다. 터미널 창을 열고 다음을 수행합니다.

  1. 홈(~) 디렉토리로 이동합니다.
 $ cd ~
  1. Bitbucket을 더 많이 사용하게 되면 여러 리포지토리에서 작업하게 됩니다. 이런 이유로 해당하는 모든 리포지토리를 포함하는 디렉터리를 만드는 것이 좋습니다.

  1. 리포지토리를 포함할 디렉토리를 만듭니다.

 $ mkdir repos
  1. 터미널에서 작업을 수행하려는 디렉토리를 새 리포지토리 디렉토리로 업데이트합니다.
 $ cd ~/repos
  1. Bitbucket에서 BitbucketStationLocations 리포지토리로 이동합니다.

  2. 글로벌 사이드바에서 + 아이콘을 클릭하고 이 리포지토리 복제를 선택합니다.

    Bitbucket에 복제 작업을 위한 팝업 대화 상자가 표시됩니다. 기본적으로 복제 대화 상자에서는 설정에 따라 프로토콜이 HTTPS 또는 SSH로 설정되어 있습니다. 이 자습서에서는 기본 프로토콜을 변경하지 마세요.

    대화 복제

  3. 강조 표시된 복제 명령을 복사합니다.

  4. 터미널 창에서, Bitbucket에서 복사한 명령을 붙여넣고 돌아가기를 누릅니다.

  5. 터미널에서 Bitbucket 비밀번호를 요청하면 입력합니다. Google에 연결하여 계정을 만든 경우 해당 계정의 비밀번호를 사용합니다.

    • Windows 비밀번호 오류가 발생하는 경우:

      • Microsoft Windows 운영 체제 및 Git의 일부 버전에서는 다음 예시와 비슷한 오류가 발생할 수 있습니다.

        Windows 비밀번호 복제 오류의 예

$ git clone

https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git 

Cloning into 'bitbucketspacestation'...

fatal: could not read

Password for 'https://emmap1@bitbucket.org': No such file or directory
      • 이 오류가 발생하면 명령줄에 다음을 입력합니다.
  $ git config --global core.askpass
      • 그런 다음 4단계로 돌아가서 복제 프로세스를 반복합니다. bash 에이전트가 비밀번호를 입력하라는 메시지를 표시합니다. 이 작업은 한 번만 하면 됩니다.
    • 이 시점에 터미널 창이 다음과 비슷할 것입니다.
$ cd ~/repos

$ git clone https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git
Cloning into 'bitbucketstationlocations'...
Password
warning: You appear to have cloned an empty repository.
    • 리포지토리가 비어 있는 이유는 아직 소스 파일을 추가하지 않았기 때문입니다.

  1. 리포지토리 디렉토리의 내용을 나열하면 그 안에 bitbucketstationlocations 디렉토리가 표시됩니다.

$ ls

축하합니다! 리포지토리를 로컬 시스템에 복제했습니다.

2단계. 로컬 리포지토리 파일을 추가하고 Bitbucket에 저장

로컬 시스템에 리포지토리가 있으면 이제 작업을 시작할 차례입니다. 모든 우주 정거장의 위치를 추적하기 위해 모든 위치에 대한 파일을 만들어 보겠습니다.

  1. 터미널 창에서 로컬 리포지토리의 최상위 수준으로 이동합니다.
 $ cd ~/repos/bitbucketstationlocations/
  1. 터미널 창에 다음 줄을 입력하여 콘텐츠가 있는 새 파일을 만듭니다.
$ echo "Earth's Moon" >> locations.txt
  1. 명령줄에서 아무것도 반환하지 않으면 파일을 올바르게 만들었다는 것입니다.

  1. 로컬 리포지토리의 상태를 가져옵니다. git status 명령은 프로젝트가 어떻게 진행되고 있는지 Bitbucket 리포지토리와 비교하여 알려줍니다.

    이 시점에 Git은 사용자가 새 파일을 만들었다는 것을 인식하며, 다음과 같은 화면이 표시됩니다.

$ git status 
 On branch main
 Initial commit
 Untracked files:
   (use "git add <file>..." to include in what will be committed)
     locations.txt
 nothing added to commit but untracked files present (use "git add" to track)
  1. 파일은 추적되지 않습니다. 즉, Git은 이전 커밋의 일부가 아닌 파일을 보게 된다는 뜻입니다. 상태 출력에서는 다음 단계, 파일을 추가를 보여줍니다.

  1. git add 명령을 사용하여 새 locations.txt 파일을 추적하도록 Git에 지시합니다. 파일을 만들 때와 마찬가지로, git add 명령은 파일을 올바르게 입력하면 아무것도 반환하지 않습니다.

$ git add locations.txt
  1. git add 명령은 변경 사항을 작업 디렉토리에서 Git 스테이징 영역으로 이동시킵니다. 스테이징 영역은 변경 사항의 모음을 공식적인 기록으로 커밋하기 전에 그러한 변경 사항의 스냅샷을 준비하는 곳입니다.

    Git 추가 스테이징

  1. 파일의 상태를 확인합니다.

 $ git status 
 On branch main
 Initial commit
 Changes to be committed:
   (use "git rm --cached <file>..." to unstage)
     new file: locations.txt
  1. 이제 새 파일이 추가(스테이징)된 것을 볼 수 있으며 준비가 되면 커밋할 수 있습니다. git status 명령은 작업 디렉토리와 스테이징한 스냅샷의 상태를 표시합니다.

  1. 다음 줄에 나와 있는 대로 git commit 명령을 커밋 메시지와 함께 실행합니다. -m은 커밋 메시지가 뒤에 이어진다는 것을 나타냅니다.

$ git commit -m 'Initial commit' 
 [main (root-commit) fedc3d3] Initial commit
  1 file changed, 1 insertion(+)
  create mode 100644 locations.txt
  1. git commit은 스테이징한 스냅샷을 프로젝트 기록에 커밋합니다. 이 프로세스는 git add와 결합되어 모든 Git 사용자의 기본 워크플로를 정의합니다.

    Git 커밋

    이 단계까지는 수행한 모든 작업이 로컬 시스템에 있으며, 해당 변경 사항을 푸시할 때까지 Bitbucket 리포지토리에 표시되지 않습니다.

    • Git 및 원격 리포지토리에 대해 좀 더 알아보기

      • 원격 리포지토리(이 연습에서 사용한 원격 리포지토리는 Bitbucket)와 통신하는 Git의 기능은 모든 Git 기반 공동 작업 워크플로의 근간입니다.

      • Git의 공동 작업 모델은 자체적인 로컬 기록 및 브랜치 구조를 갖춘 리포지토리의 사본을 모든 개발자에게 제공합니다. 사용자는 일반적으로 하나의 변경 집합이 아니라 일련의 커밋을 공유해야 합니다. 작업 중인 사본에서 중앙 리포지토리로 변경 집합을 커밋하는 대신 Git을 사용하면 여러 리포지토리 사이에서 전체 브랜치를 공유할 수 있습니다.

        Git 브랜칭

      • 브랜치를 다른 리포지토리로 '푸시'하여 다른 리포지토리와의 연결을 관리하고 로컬 기록을 게시합니다. 브랜치를 로컬 리포지토리로 '풀링'하여 다른 사용자가 기여한 내용을 확인할 수 있습니다.

  1. 로컬 터미널 창으로 돌아가서 git push origin main을 사용하여 커밋한 변경 사항을 Bitbucket에 보냅니다. 이 명령은 원본(Bitbucket Server)의 메인 브랜치(Bitbucket의 브랜치)로 푸시하도록 지정합니다.

    다음과 비슷한 응답이 표시될 것입니다.

 $ git push origin main 
 Counting objects: 3, done.
 Writing objects: 100% (3/3), 253 bytes | 0 bytes/s, done.
 Total 3 (delta 0), reused 0 (delta 0) To https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git
  * [new branch] main -> main
 Branch main set up to track remote branch main from origin.
  1. 커밋이 이제 원격 리포지토리(원본)에 있습니다.

    Git 푸시
  1. Bitbucket의 BitbucketStationLocations 리포지토리로 이동합니다.

  2. 사이드바에서 커밋을 클릭하면 리포지토리에 하나의 커밋이 표시됩니다. Bitbucket은 사용자가 해당 커밋에 수행했던 모든 내용을 결합하여 사용자에게 표시합니다. 작성자 열에는 Git 전역 파일( ~/.gitconfig)을 구성할 때 사용한 값이 표시됩니다.
    사이드바에서 소스를 클릭하면 리포지토리에 사용자가 추가한 하나의 소스 파일, 즉 방금 추가한 locations.txt 파일이 표시됩니다.

    Bitbucket 커밋

리포지토리를 처음 만들었을 때 어떤 모습이었는지 기억하십니까? 지금은 약간 달라졌을 것입니다.

Bitbucket Cloud의 Git 리포지토리에서 변경 사항 풀링

우주 정거장 관리자가 다음으로 할 작업에는 위치에 대한 자세한 정보가 포함된 파일이 필요합니다. 지금은 위치가 많지 않으므로 Bitbucket에서 바로 추가할 것입니다.

1단계. Bitbucket에서 파일 생성

새 위치 파일을 추가하려면 다음을 수행합니다.

  1. BitbucketStationLocations 리포지토리에서 소스를 클릭하여 소스 디렉토리를 엽니다. 디렉토리에는 locations.txt라는 하나의 파일만 있습니다.

    Bitbucket 소스 창

    A. 소스 페이지: 링크를 클릭하여 이 페이지를 엽니다.
    B. 브랜치 선택: 표시할 브랜치를 선택합니다.
    C. 추가 옵션 버튼: '파일 추가'와 같은 추가 옵션이 있는 메뉴를 열려면 클릭합니다.
    D. 소스 파일 영역: Bitbucket의 파일 디렉토리를 확인합니다.

  2. 소스 페이지의 오른쪽 상단 모서리에 있는 추가 옵션 버튼을 클릭하고 메뉴에서 파일 추가를 선택합니다. 리포지토리에 파일을 하나 이상 추가해야 추가 옵션 버튼이 표시됩니다.

    다음 그림과 같이 새 파일을 만들 수 있는 페이지가 열립니다.

    Bitbucket 새 파일Bitbucket 새 파일Bitbucket new fileA. 새 파일이 포함된 브랜치: 파일을 다른 브랜치에 추가하려면 변경합니다.
    B. 새 파일 영역: 새 파일의 콘텐츠를 여기에 추가합니다.

  3. filename 필드에 stationlocations를 입력합니다.

  4. 구문 모드 목록에서 HTML을 선택합니다.

  5. 텍스트 상자에 다음과 같은 HTML 코드를 추가합니다.

 <p>Bitbucket has the following space stations:</p>
 <p>
     <b>Earth's Moon</b><br>
     Headquarters
 </p>
  1. 커밋을 클릭합니다. stationlocations created online with Bitbucket이라는 메시지가 표시된 커밋 메시지 필드가 나타납니다.

  2. 메시지 필드 아래의 커밋을 클릭합니다.

이제 Bitbucket에 새 파일을 만들었습니다. 커밋 세부 정보가 있는 페이지로 이동합니다. 여기서 방금 변경한 내용을 볼 수 있습니다.

마스터 브랜치

지금까지 커밋한 내용의 목록을 보려면 사이드바에서 커밋을 클릭합니다.

2단계. 원격 리포지토리에서 변경 사항 가져오기

이제 새 파일을 로컬 리포지토리에 가져와야 합니다. 프로세스는 상당히 단순합니다. locations.txt 파일을 Bitbucket에 가져오는 데 사용한 푸시를 반대로 하면 됩니다.

파일을 로컬 리포지토리에 풀링하려면 다음을 수행합니다.

  1. 터미널 창을 열고 로컬 리포지토리의 최상위 수준으로 이동합니다.
 $ cd ~/repos/bitbucketstationlocations/
  1. git pull --all 명령을 입력하여 Bitbucket에서 모든 변경 사항을 풀링합니다. (이보다 복잡한 브랜치 워크플로에서는 모든 변경 사항을 풀링 및 병합하는 것이 적합하지 않을 수 있습니다.) Bitbucket에서 비밀번호를 요청하면 입력합니다. 터미널은 다음과 비슷할 것입니다
$ git pull --all
 Fetching origin
 remote: Counting objects: 3, done.
 remote: Compressing objects: 100% (3/3), done.
 remote: Total 3 (delta 0), reused 0 (delta 0)
 Unpacking objects: 100% (3/3), done.
 From https://bitbucket.org/emmap1/bitbucketstationlocations
    fe5a280..fcbeeb0 main -> origin/main
 Updating fe5a280..fcbeeb0
 Fast-forward
  stationlocations | 5 ++++++++++++++
  1 file changed, 5 insertions(+)
  create mode 100644 stationlocations
  1. git pull 명령은 하나의 명령으로 원격 리포지토리(Bitbucket)의 파일을 로컬 리포지토리에 병합합니다.

    원본에서 로컬
  1. 로컬 시스템의 리포지토리 폴더로 이동하면 방금 추가한 파일이 표시됩니다.

아주 좋습니다! 우주 정거장의 위치에 대한 두 개의 파일을 추가하여 Bitbucket과 로컬 시스템 간의 기본 Git 워크플로(복제, 추가, 커밋, 푸시 및 풀링)를 수행했습니다.

Git 브랜치를 사용하여 파일 병합

우주 정거장 관리자에게는 특정 책임이 뒤따릅니다. 특히 태양계의 새 위치를 매핑할 때 정보를 잠긴 상태로 유지해야 하는 경우가 있습니다. 브랜치에 대해 배우면 파일을 업데이트할 수 있고 준비가 되었을 때만 정보를 공유할 수 있습니다.

브랜치는 팀에서 작업할 때 가장 강력합니다. 사용자는 자신의 브랜치에서 자신에게 해당하는 프로젝트 부분에 대해 작업하고, Bitbucket에서 업데이트를 끌어오고, 준비되면 모든 작업을 메인 브랜치에 병합할 수 있습니다. Atlassian 설명서에는 브랜치를 사용해야 하는 이유에 대한 자세한 설명이 나와 있습니다.

브랜치는 리포지토리의 독립적인 개발 라인을 나타냅니다. 완전히 새로운 작업 디렉토리, 스테이징 영역 및 프로젝트 기록이라고 생각하세요. 새 브랜치를 만들기 전에 자동으로 기본 브랜치에서 시작하게 됩니다. 시각적인 예를 들어 설명하자면, 이 다이어그램은 메인 브랜치와 버그 수정 업데이트가 있는 다른 브랜치를 보여줍니다.

Git 브랜칭

1단계. 브랜치 만들기 및 변경

커밋할 준비가 되지 않은 우주 정거장에 대해 향후 계획을 추가할 수 있는 브랜치를 만듭니다. 계획을 모두에게 알릴 준비가 되면 변경 사항을 Bitbucket 리포지토리에 병합한 다음 더 이상 필요하지 않은 브랜치를 삭제할 수 있습니다.

브랜치는 커밋에 대한 포인터일 뿐이라는 점을 이해해야 합니다. 브랜치를 만들 때 Git은 새 포인터만 만들며, 완전히 새로운 파일이나 폴더의 세트를 만들지는 않습니다. 시작하기 전의 리포지토리는 다음과 비슷할 것입니다.

마스터 브랜치

브랜치를 만들려면 다음을 수행합니다.

  1. 터미널 창에서 다음 명령을 사용하여 로컬 리포지토리의 최상위 수준으로 이동합니다.
cd ~/repos/bitbucketstationlocations/
  1. 터미널 창에서 브랜치를 만듭니다.

$ git branch future-plans
  1. 이 명령은 브랜치를 만들지만 해당 브랜치로 전환되지는 않으므로 리포지토리는 다음과 유사할 것입니다.

    브랜치 생성

    리포지토리 기록은 변경되지 않고 그대로 유지됩니다. 현재 브랜치에 대한 새로운 포인터만 얻게 됩니다. 새 브랜치에서 작업을 시작하려면 사용하려는 브랜치를 체크아웃해야 합니다.

  1. 방금 만든 새 브랜치를 체크아웃하여 사용하기 시작합니다.

$ git checkout future-plans 
Switched to branch 'future-plans'
  1. git checkout 명령은 git 브랜치와 함께 작동합니다. 새로운 작업을 위해 브랜치를 만드는 중이므로, (git branch를 통해) 새 브랜치를 만들 때마다 브랜치를 사용하려면 ( (git checkout을 통해) 체크아웃해야 합니다. 이제 새 브랜치를 체크아웃했으므로 Git 워크플로는 다음과 비슷할 것입니다.

    기능 브랜치

  1. 로컬 시스템에서 bitbucketstationlocations 폴더를 검색하여 엽니다. 새 브랜치의 결과로 디렉토리에 추가 파일이나 폴더가 만들어지지 않은 것을 볼 수 있습니다.

  2. 텍스트 편집기를 사용하여 stationlocations 파일을 엽니다.

  3. 다른 스테이션 위치를 추가하여 파일을 변경합니다.

<p>Bitbucket has the following space stations:</p>
<p>
   <b>Earth's Moon</b><br>
   Headquarters
</p>
<p>
   <b>Mars</b><br>
   Recreation Department
</p>
  1. 파일을 저장하고 닫습니다.

  2. 터미널 창에 git status를 입력합니다. 다음과 비슷하게 표시될 것입니다.

$ git status 
On branch future-plans
Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)
   modified: stationlocations
no changes added to commit (use "git add" and/or "git commit -a")
  1. On branch future-plans 줄에 주목하세요. 이전에 git status를 입력했다면 main branch가 하나만 있었기 때문에 이 줄이 branch main에 있었을 것입니다. 변경 사항을 스테이징하거나 커밋하기 전에 항상 이 줄을 확인하여 변경 사항을 추가할 브랜치를 체크아웃했는지 확인하세요.

  1. 파일을 스테이징합니다.

$ git add stationlocations
  1. 다음과 같이 터미널 창에 git commit 명령을 입력합니다.

$ git commit stationlocations -m 'making a change in a branch' 
[future-plans e3b7732] making a change in a branch
1 file changed, 4 insertions(+)
  1. 마지막 커밋으로 인해 리포지토리는 다음과 비슷할 것입니다.

    기능 브랜치 커밋

    이제 방금 변경한 내용을 다시 main 브랜치에 병합할 차례입니다.

2단계. 브랜치 병합: 빠른 전달 병합

우주 정거장이 발전하고 있으며 화성 정거장의 개장을 기념할 차례입니다. 향후 계획이 실현되고 있으므로 future-plans 브랜치를 로컬 시스템의 메인 브랜치에 병합할 수 있습니다.

브랜치를 하나만 만들었고 변경 사항이 하나밖에 없으므로 빨리 감기 브랜치 병합 방법을 사용하여 병합합니다. 현재 브랜치 팁에서 대상 브랜치까지의 직선 경로가 있으므로 빨리 감기 병합을 수행할 수 있습니다. 브랜치를 '실제로' 병합하는 대신, Git은 현재 브랜치 팁을 대상 브랜치 팁까지 이동시키는 작업(즉, '빨리 감기')만으로 기록을 통합할 수 있습니다. 대상 브랜치에서 연결할 수 있는 모든 커밋을 이제 현재 커밋을 통해 사용할 수 있으므로 기록이 효과적으로 결합됩니다.

빨리 감기 병합

이 브랜치 워크플로는 변경 사항이 적은 단기적인 주제 브랜치에서 일반적으로 사용되며 장기적으로 실행되는 기능에서는 잘 사용되지 않습니다.

빨리 감기 병합을 완료하려면 다음을 수행합니다.

  1. 터미널 창에서 로컬 리포지토리의 최상위 수준으로 이동합니다.
 $ cd ~/repos/bitbucketstationlocations/
  1. git status 명령을 입력하여 모든 변경 사항을 커밋했는지 확인하고 어떤 브랜치를 체크아웃했는지 파악합니다.
$ git status 
On branch future-plans
nothing to commit, working directory clean
  1. main 브랜치로 전환합니다.
$ git checkout main 
Switched to branch 'main'
Your branch is up-to-date with 'origin/main'.
  1. future-plans 브랜치의 변경 사항을 main 브랜치에 병합합니다. 다음과 비슷하게 표시될 것입니다.
$ git merge future-plans 
Updating fcbeeb0..e3b7732
Fast-forward
stationlocations | 4 ++++
1 file changed, 4 insertions(+)
  1. 기본적으로 main 브랜치에 대한 포인터를 현재 헤드 앞으로 이동한 것이며, 리포지토리는 위의 빨리 감기(fast forward) 병합과 비슷하게 표시됩니다.
  1. future-plans를 더 이상 사용하지 않을 계획이므로 브랜치를 삭제할 수 있습니다.

$ git branch -d future-plans 
Deleted branch future-plans (was e3b7732).
  1. future-plans를 삭제해도 main에서 커밋 ID를 사용하여 브랜치에 액세스할 수 있습니다. 예를 들어 future-plans로부터 추가된 변경 사항을 실행 취소하려면 방금 받은 커밋 ID를 사용하여 해당 브랜치로 돌아가면 됩니다.
  1. git status를 입력하여 병합 결과를 확인합니다. 그러면 로컬 리포지토리가 원격 리포지토리보다 앞서 있는 것으로 나타납니다. 다음과 비슷하게 표시될 것입니다.

$ git status 
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
 (use "git push" to publish your local commits)
nothing to commit, working directory clean

지금까지 완료한 작업은 다음과 같습니다.

  • 브랜치를 만들고 체크아웃
  • 새 브랜치에서 변경을 수행
  • 새 브랜치에 변경 사항을 커밋
  • 변경 사항을 다시 메인 브랜치로 통합
  • 더 이상 사용하지 않는 브랜치를 삭제

이제 이 모든 작업을 원격 리포지토리인 Bitbucket에 다시 푸시해야 합니다.

3단계. 변경 사항을 Bitbucket에 푸시하기

다른 사용자가 새 우주 정거장의 위치를 볼 수 있도록 하려는 경우, 로컬 리포지토리의 현재 상태를 Bitbucket으로 푸시하면 됩니다.

아래의 다이어그램은 중앙 리포지토리에 없는 변경 사항이 로컬 리포지토리에 있고 해당 변경 사항을 Bitbucket으로 푸시할 때 어떤 일이 일어나는지 보여줍니다.

브랜치를 푸시하기 이전 및 이후

변경 사항을 원격 리포지토리에 푸시하는 방법은 다음과 같습니다.

  1. 터미널 창의 리포지토리 디렉토리에서 git push origin main을 입력하여 변경 사항을 푸시합니다. 결과는 다음과 비슷하게 표시될 것입니다.
 $ git push origin main
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 401 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git
  fcbeeb0..e3b7732 main -> main
  1. Bitbucket 리포지토리의 개요 페이지를 클릭하면 최근 활동 스트림에 푸시한 내용이 표시됩니다.

  2. 커밋을 클릭하면 로컬 시스템에서 커밋한 내용이 표시됩니다. 변경 사항은 로컬 시스템에서와 동일한 커밋 ID를 유지합니다.

    커밋 활동

    또한 커밋 목록의 왼쪽에 있는 줄에는 직선 경로가 있고 브랜치가 표시되지 않는 것을 확인할 수 있습니다. 그 이유는 future-plans 브랜치가 상호 작용한 대상이 원격 리포지토리가 아니라 사용자가 만들고 커밋한 변경 사항뿐이기 때문입니다.

  3. 브랜치를 클릭하면 페이지에 브랜치의 기록도 없는 것을 알 수 있습니다.

  4. 소스를 클릭한 다음 stationlocations 파일을 클릭합니다. 파일에 대한 마지막 변경 사항에 사용자가 푸시한 커밋 ID가 있습니다.

  5. 이 파일에 대해 커밋한 변경 사항을 보려면 파일 기록 목록을 클릭합니다.

    파일 내역

완료되었습니다!

지금까지 배운 Git 명령이 잘 생각나지 않을 것 같으십니까? 걱정하지 마세요. 필요할 때 참조할 수 있도록 기본 Git 명령 페이지를 즐겨찾기에 추가하면 됩니다.