Close

Bitbucket Cloud로 브랜칭 알아보기

목표

이 자습서에서는 Git과 Bitbucket Cloud를 사용하여 브랜치를 만들고, 작업하고, 검토하고, 병합하는 기본 사항을 알려줍니다.

시간

35분

대상 그룹

기본 Git 워크플로를 이미 이해하는 사용자

이 자습서는 다음과 같은 방법을 포함하여 기본적인 Git 워크플로를 이미 이해하는 경우에 유용합니다.

  • 복제: Bitbucket Cloud의 원격 리포지토리를 로컬 컴퓨터에 복사
  • 추가 또는 스테이징: 변경 사항을 가져와 Git 기록에 추가할 준비
  • 커밋: 리포지토리의 Git 기록에 새 파일 또는 변경된 파일 추가
  • : 다른 사용자가 리포지토리에 추가한 새로운 변경 사항을 로컬 리포지토리로 가져오기
  • 푸시: 로컬 컴퓨터에서 원격 리포지토리로 변경 사항 가져오기

Git의 기본 사항을 모르더라도 걱정하지 마세요. Bitbucket Cloud로 Git에 대해 알아보기 자습서를 통해 금방 익힐 수 있습니다.

브랜칭이 중요한 이유

브랜칭은 버전 제어를 위해 Git을 최대한 활용하는 가장 좋은 방법 중 하나입니다. Git에서 브랜칭하면 다음과 같은 작업이 가능합니다.

  • 여러 팀이 하나의 리포지토리에서 동시에 작업할 수 있습니다.
  • 전 세계 어디서든 팀원들이 Bitbucket Cloud를 사용하여 공동 작업할 수 있습니다.
  • 코드 동결 없이 서로 독립적으로 여러 개발 라인을 동시에 실행할 수 있습니다.

설치하기


우리는 사용자가 공통 Bitbucket 리포지토리에서 팀으로 작업하는 것처럼 느끼기를 원하기 때문에 제공한 공개 리포지토리에 포크하도록 할 것입니다.

포크란?

포크는 복제 또는 복사본을 저장하는 또 다른 방법입니다. 프로그래밍에서 포크라는 용어는 기존 프로세스의 복사본을 만드는 Unix 시스템 호출에서 유래되었습니다. 따라서 브랜치와 달리 포크는 원본 리포지토리와 독립적입니다. 원본 리포지토리를 삭제해도 포크는 그대로 남습니다. 리포지토리를 포크하면 해당 리포지토리 및 리포지토리의 모든 브랜치를 얻게 됩니다.

1. tutorials/tutorials.git.bitbucket.org로 이동합니다.

2. 화면 왼쪽에 있는 +> 이 리포지토리 포크를 클릭합니다.

3. 팀마다 고유하도록 이름을 수정한 다음 리포지토리 포크를 클릭합니다.

4. 탐색하기 쉬운 리포지토리용 디렉터리를 만듭니다. 다음과 같이 선택할 수 있습니다.

Bitbucket 로고
솔루션 보기

Bitbucket Cloud에서 Git에 대해 알아보기

Git 로고
관련 자료

Git 명령

$ mkdir test-repositories $ cd test-repositories/ $ test-repositories

앞의 예시에서는 mkdir(디렉터리 만들기) 명령을 사용하여 test-repositories 디렉터리를 만들고 cd(디렉터리 변경) 명령을 사용하여 해당 디렉터리로 전환합니다.

5. 포크한 리포지토리를 방금 만든 디렉터리에 복제합니다. 다음과 비슷하게 표시될 것입니다.

$ git clone https://dstevenstest@bitbucket.org/dstevenstest/mygittutorial.bitbucket.io.git     Cloning into 'mygittutorial.bitbucket.io'...     remote: Counting objects: 12392, done.     remote: Compressing objects: 100% (12030/12030), done.     remote: Total 12392 (delta 8044), reused 564 (delta 360)     Receiving objects: 100% (12392/12392), 2.72 MiB | 701.00 KiB/s, done.     Resolving deltas: 100% (8044/8044), done. $ cd mygittutorial.bitbucket.io/

git clone 명령으로 리포지토리를 복제하고 복제가 만든 mygittutorial.git.bitbucket.io 디렉터리를 만듭니다.

브랜치를 만들고 브랜칭 워크플로를 사용하여 변경

이 브랜치에서는 웹사이트에 인용문을 추가할 것입니다.

1. git branch 명령을 사용하여 브랜치를 만듭니다.

$ git branch test-1

2. 방금 git checkout 명령을 사용하여 만든 브랜치를 체크아웃합니다.

$ git checkout test-1 Switched to branch 'test-1'

3. git branch 명령을 사용하여 로컬에 있는 브랜치를 나열합니다.

$ git branch   main   * test-1

4. 인용문을 추가하여 editme.html 파일에 업데이트합니다. 다음과 같은 인용문을 사용할 수 있습니다.

This is a quote, and I like it.
   A quote: The Art of Quoting 

5. 해당 변경 사항을 추가합니다.

git add editme.html

참고: 변경 사항은 아직 Git 기록에 커밋되지 않았으며 "대기" 상태입니다. 이는 변경 사항 저장에서 학습한 내용입니다.

6. 커밋 설명 메시지로 변경 사항을 커밋합니다.

git commit editme.html -m'added a new quote' [test-1 063b772] added a new quote 1 file changed, 3 insertions(+), 3 deletions(-)

참고: 이제 변경 사항은 단일 "커밋"으로서 Git 기록에 포함됩니다. 이는 변경 사항 저장에서 학습한 내용입니다.

7. git push 명령을 사용하여 해당 변경 사항을 Bitbucket에 푸시합니다.

git push fatal: The current branch test-1 has no upstream branch. To push the current branch and set the remote as upstream, use   git push --set-upstream origin test-1

로컬에서 만든 새 브랜치를 처음 푸시할 때 해당 브랜치를 지정해야 하므로 오류가 표시됩니다.

8. 브랜치를 푸시하고 git push branch 명령을 사용하여 변경합니다.

$ git push origin test-1 Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 363 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: remote: Create pull request for test-1: remote: https://bitbucket.org/dstevenstest/dans.git.bitbucket.org/pull-requests/new?source=test-1&t=1 remote: To https://bitbucket.org/dstevenstest/dans.git.bitbucket.org.git * [new branch] test-1 -> test-1

이것은 원본 리포지토리가 이 새 브랜치의 대상이라는 것을 시스템에 알려줍니다.

9. 자습서 리포지토리를 열어 브랜치를 클릭합니다. 이제 main 브랜치와 test-1 브랜치를 모두 볼 수 있습니다. 다음과 비슷하게 표시될 것입니다.

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

원격 브랜치 만들고, 가져오고, 체크아웃

팀원과 함께 작업할 때는 다른 팀원이 만들고 Bitbucket으로 푸시하는 브랜치를 풀하거나 가져와야 하는 경우가 있습니다. 이 예시에서는 브랜치를 만들고 다른 팀원이 만든 브랜치로 작업하는 데 필요한 몇 가지 기본적인 사항을 알려드리겠습니다.

1. Bitbucket의 자습서 리포지토리로 이동하여 브랜치를 클릭합니다. 다음과 비슷하게 표시될 것입니다.

튜토리얼 브랜치

2. 브랜치 만들기를 클릭하고 브랜치 이름을 test-2로 지정한 다음 만들기를 클릭합니다.

3. 브랜치 체크아웃 대화 상자에 git fetch 명령을 복사합니다. 아마 다음과 비슷하게 표시될 것입니다.

$ git fetch && git checkout test-2 From https://bitbucket.org/dstevenstest/dans.git.bitbucket.org * [new branch] test-2 -> origin/test-2 Branch test-2 set up to track remote branch test-2 from origin. Switched to a new branch 'test-2'

4. 터미널에서 git branch 명령을 사용합니다. 브랜치 목록은 다음과 비슷하게 표시될 것입니다.

$ git branch   main   test-1 * test-2

별표(*)가 있는 브랜치는 활성 브랜치입니다. 이것은 브랜칭 워크플로에서 작업할 때 기억해야 할 중요한 사항입니다.

5. git status 명령을 사용하면 다음과 비슷하게 표시될 것입니다.

$ git status On branch test-2 Your branch is up-to-date with 'origin/test-2'. nothing to commit, working tree clean

현재 어떤 브랜치에 있으며 해당 브랜치가 현재 원격(origin) 브랜치로 최신 상태인지 확인할 수 있습니다.

6. git checkout 명령을 사용하여 다른 브랜치로 초점을 다시 바꿉니다. 명령은 다음과 비슷하게 표시될 것입니다.

$ git checkout test-1 Switched to branch 'test-1' Your branch is ahead of 'origin/test-1' by 3 commits. (use "git push" to publish your local commits)

브랜치에서 작업할 때 기억해야 할 가장 중요한 것 중 하나는 변경하려는 브랜치가 올바른 브랜치인지 확인해야 한다는 것입니다.

변경 사항 푸시 및 풀리퀘스트 만들기

이제 첫 번째 변경 사항을 검토하고 브랜치를 병합할 차례입니다.

1. +>풀리퀘스트 만들기를 클릭합니다. 소스 브랜치인 test-1 브랜치와 대상 브랜치의 main 을 볼 수 있습니다.

기존 리포지토리를 포크하여 이 리포지토리를 만들었기 때문에 대상은 우리가 포크한 리포지토리의 main 브랜치로 설정됩니다.

이 문제를 해결하려면 리포지토리 대상 브랜치(변경 사항을 병합할 브랜치)를 tutorials/tutorials.git.bitbucket.org에서 리포지토리로 변경해야 합니다.

풀리퀘스트

또한 팀의 검토자도 풀리퀘스트에 추가합니다. 풀리퀘스트에 대해 자세히 알아보기

2. 풀리퀘스트 만들기를 클릭합니다.

3. diff(editme.html 파일의 변경 사항을 표시하는 영역)에서 줄을 선택하여 풀리퀘스트에 댓글을 추가합니다.

4. 페이지 왼쪽 상단에서 승인을 클릭합니다. 물론 실제 풀리퀘스트에서는 검토자가 댓글을 추가하게 됩니다.

5. 병합을 클릭합니다.

6. (선택 사항) 세부 정보를 입력하여 커밋 메시지를 업데이트합니다.

7. 두 옵션 중에서 병합 커밋 병합 전략을 선택: 이 두 가지 유형의 병합 전략에 대해 자세히 알아보세요.

  • 커밋 병합—소스 브랜치의 모든 커밋을 유지하고 대상 브랜치의 일부로 만듭니다. 이 옵션은 명령줄에 git merge --no-ff를 입력하는 것과 같습니다.
  • 스쿼시—소스 브랜치를 대상 브랜치에 병합할 때 커밋을 결합합니다. 이 옵션은 명령줄에 git merge --squash를 입력하는 것과 같습니다.

8. 커밋을 클릭하면 방금 병합한 브랜치가 더 큰 변경 체계에 어떻게 적용되는지 확인할 수 있습니다.

브랜치를 삭제하고 main을 로컬 작업 브랜치로 풀

이제 기본적인 브랜칭 워크플로를 다뤘으며 변경 사항은 main에 있습니다. 마지막으로, 방금 병합한 브랜치를 삭제하고 업데이트된 main 브랜치를 풀하며 업데이트된 main 브랜치를 test-2 브랜치에 병합하는 방법을 알아보겠습니다.

브랜치를 삭제하는 이유

Git에서의 브랜칭은 SVN 또는 비슷한 버전 제어 시스템과는 달리 main 브랜치와 개발 브랜치와 같은 장기 실행 브랜치와 이 자습서에서 사용하는 예시와 같은 단기 실행 개발 브랜치를 모두 사용한다는 사실을 기억하세요. 그렇기 때문에 로컬 환경을 더 깔끔하게 유지하기 위해 로컬 브랜치를 삭제하는 것도 나쁜 생각은 아닙니다.

main을 풀하여 test-2에 병합하는 이유

이 경우를 다른 팀원이 작업 중인 리포지토리에서 작업하는 예시에서 사용했습니다. 풀리퀘스트에서 병합 충돌을 방지하기 위해 수시로 변경 사항을 작업 브랜치로 풀하는 것이 좋습니다.

1. 터미널을 열어 git status 명령을 실행하면 결과는 다음과 비슷하게 표시될 것입니다.

$ git status On branch test-1 nothing to commit, working tree clean

방금 변경을 수행한 브랜치에 있고 변경 사항이 없음을 알 수 있습니다. 이제 이 작업을 완료했으니 해당 브랜치를 제거할 준비가 되었습니다.

2. git checkout main 명령을 실행하여 main 브랜치로 전환합니다. 결과는 다음과 비슷하게 표시될 것입니다.

git checkout main Switched to branch 'main' Your branch is up-to-date with 'origin/main'.

메시지에 최신 상태라고 표시되어 있는 것을 확인하셨습니까? 이것은 로컬 브랜치일 뿐입니다. 방금 main에 변경 사항을 병합했는데 해당 변경 사항을 원격 리포지토리에서 로컬 컴퓨터로 풀하지 않았기 때문에 알 수 있습니다. 바로 이것이 다음으로 수행할 작업입니다.

3. git pull 명령을 실행합니다. 결과는 다음과 비슷하게 표시될 것입니다.

$ git pull remote: Counting objects: 1, done. remote: Total 1 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (1/1), done. From https://bitbucket.org/dstevenstest/dans.git.bitbucket.org 2d4c0ab..dd424cb main -> origin/main Updating 2d4c0ab..dd424cb Fast-forward editme.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)

원격 리포지토리에서 변경 사항을 풀하면 Git은 빨리 감기 병합을 실행하여 변경 사항을 통합합니다. 또한 해당 파일에서 변경된 파일 및 줄 수를 나열합니다.

4. git branch -d {branch_name} 명령을 실행하여 test-1 브랜치를 제거합니다. 결과는 다음과 비슷하게 표시될 것입니다.

$ git branch -d test-1 Deleted branch test-1 (was 063b772)

이 명령으로 브랜치가 삭제되었으며 해당 브랜치에 대한 마지막 커밋 해시가 무엇인지 알 수 있습니다. 이것은 브랜치를 삭제하는 안전한 방법입니다. 커밋되지 않은 변경 사항이 있는 경우 Git에서는 브랜치를 삭제할 수 없기 때문입니다. 하지만 이렇게 하더라도 Git 기록에 커밋되었지만 다른 브랜치에 병합되지 않은 변경 사항이 삭제되는 것을 막지는 못한다는 점에 유의해야 합니다.

5. git checkout 명령을 사용하여 test-2 브랜치로 전환합니다.

$ git checkout test-2 Switched to branch 'test-2' Your branch is up-to-date with 'origin/test-2'.

6. git merge main test-2 명령을 사용하여 main 브랜치를 작업 브랜치로 병합합니다. 결과는 다음과 비슷하게 표시될 것입니다.

$ git merge main test-2 Updating 2d4c0ab..dd424cb Fast-forward editme.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)

다음 사항을 기억하는 것이 중요합니다.

  • 활성 브랜치는 중요합니다. main을 test-2에 병합하려면 test-2를 체크아웃(활성화)해야 합니다. 마찬가지로 test-2를 main에 병합하고 싶으면 main을 체크아웃해야 합니다.
  • 어떤 브랜치가 활성 상태인지 보려면 git branch를 사용합니다. 활성 브랜치는 별표가 표시되어 있습니다. 또는 git status 를 사용하여 현재 사용자가 있는 브랜치와 보류 중인 로컬 변경 사항이 있는지 확인할 수 있습니다.

브랜칭 및 관련 명령에 대해 조금 익숙해지셨기를 바랍니다. 방금 다룬 내용을 복습해 보겠습니다.

브랜칭 워크플로 검토


Git 기능 브랜치 워크플로는 Bitbucket에서 팀원과 함께 작업할 수 있는 효율적인 방법입니다. 이 워크플로에서는 모든 기능 개발이 main 브랜치가 아닌 별도의 브랜치에서 이루어집니다. 따라서 여러 개발자가 메인 코드를 건드리지 않고 각자의 기능에 대해 작업할 수 있습니다.

main 브랜치에서 시작

이 워크플로는 코드에 대해 최소한 한 명 이상의 다른 팀원과 공동 작업하는 데 유용합니다. Bitbucket 및 로컬 리포지토리가 최신 상태면 시작할 준비가 된 것입니다.

새 브랜치 만들기

작업 중인 기능이나 이슈마다 별도의 브랜치를 사용합니다. 브랜치를 만든 후에는 변경 사항이 해당 브랜치에 적용되도록 로컬에서 체크아웃합니다.

변경 사항 업데이트, 추가, 커밋, 푸시

Git을 사용할 때와 마찬가지로 기능에 대해 작업하고 커밋합니다. 준비가 되면 커밋을 푸시하고 Bitbucket에서 기능 브랜치를 업데이트합니다.

코드 검토 받기

코드에 대한 피드백을 받으려면 Bitbucket에서 풀리퀘스트를 만듭니다. 여기에서 검토자를 추가하고 병합하기 전에 모든 것이 문제가 없는지 확인할 수 있습니다.

피드백 확인

이제 팀원들이 댓글을 추가하고 승인합니다. 로컬에서 댓글을 확인 및 커밋하며 변경 사항을 Bitbucket에 푸시합니다. 업데이트는 풀리퀘스트에 나타납니다.

브랜치 병합

다른 팀원이 리포지토리를 변경한 경우 병합하기 전에 병합 충돌을 해결해야 할 수 있습니다. 풀리퀘스트가 승인되고 충돌이 없으면 main 브랜치에 코드를 추가할 수 있습니다. Bitbucket의 풀리퀘스트에서 병합합니다.

이 자습서는 브랜치가 팀을 더 효율적으로 만드는 방법을 보여주는 것으로 제한되어 있습니다. 브랜칭에는 여러 가지 접근 방식이 있으며, 이러한 접근 방식 중 일부를 워크플로 비교에서 설명합니다.


이 문서 공유

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

도구로 가득한 벽을 사용하여 협업하는 사람들

Bitbucket 블로그

DevOps 일러스트레이션

DevOps 학습 경로

Atlassian 전문가와 함께 하는 Demo Den 기능 데모

Bitbucket Cloud가 Atlassian Open DevOps와 작동하는 방법

DevOps 뉴스레터 신청

Thank you for signing up