[Git/Github] 브랜치 branch 기초

soyi·2021년 3월 20일
0

Git / Github

목록 보기
3/9
post-thumbnail

💻 브랜치 branch 기초


💡 브랜치 branch 사용을 위한 기초 내용을 정리


📌 브랜치(Branch)란?

👉 개발을 하다보면 코드를 여러 개로 복사할 일이 생긴다. 코드를 통째로 복사하고 원래 코드와 별개로 독립적으로 개발하는 것브랜치다.
👉 기존에 저장한 파일을 master 브랜치에 유지하면서 독립적으로 기존 파일 내용을 수정하거나 새로운 파일을 추가하고 스테이징, 커밋할 수 있다.
👉 HEAD는 현재 브랜치를 가리키는 포인터고, 브랜치는 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킨다.


📌 브랜치 생성, 이동, 병합

  • HEAD : 지금 작업 중인, 현재 브랜치를 가리키는 포인터.

  • git branch : 현재 저장소의 브랜치 확인.

    • 브랜치 목록에서 * 표시가 붙은 브랜치, git bash 터미널 창의 디렉토리 경로 끝에 있는 괄호 속 브랜치의 이름은 현재 브랜치를 의미함.
  • git branch [branchName] : 'branchName'이란 새 브랜치를 만든다.

  • git checkout [branchName] : 'branchName' 브랜치로 이동. HEAD가 'branchName' 브랜치를 가리키게 된다.

  • git checkout -b [branchName] : 'branchName' 브랜치를 생성하고 이동. git branch + checkout 과 같다고 볼 수 있음.

  • git log : commit log를 확인하는 git log 명령을 사용할 때, 다음과 같은 옵션을 함께 사용할 수 있다.

    • --oneline : 각 커밋을 한 줄로 간략히 띄움.
    • --braches : 각 브랜치의 커밋을 함께 볼 수 있음.
    • --graph : 브랜치와 커밋의 관계를 그래프 형태로 표시함.
    • [leftBranch]..[rightBranch] : 브랜치 이름 사이에 마침표 두 개(..)를 넣어 'leftBranch'에는 없고 'rightBranch'에만 있는 커밋을 확인할 수 있음.
  • git merge [branchName] : 현재 브랜치로 'branchName' 브랜치를 가져와 병합.

  • git branch -d [branchName] : 'branchName' 브랜치 삭제.

    • 병합 후에는 default branch로 이동하여, 더 이상 사용하지 않는 브랜치를 삭제함. 이때 삭제된 브랜치는 같은 이름으로 브랜치를 만들면 예전에 작업했던 내용이 그대로 나타남. 완전히 저장소에서 없애는 것이 아닌 깃 흐름 속에서 브랜치를 감추는 것.

📌 Branch와 Merge 예제 상황

  • 실제 개발 과정에서 브랜치와 Merge는 다음 예제와 같이 이루어진다.
  1. 웹 사이트 하나에서 작업을 진행 중
  2. 새로운 문제를 처리할 새 Branch 'issue' 생성
  3. 새로 만든 Branch 'issue' 에서 필요한 작업 진행
  4. 급한 문제가 생겨 먼저 해결 필요한 상황이 됨
  5. 'issue' 브랜치에서 작업하던 것을 모두 커밋하고, main branch로 이동하여 급한 문제 처리할 새 branch 'fix' 생성
  6. 'fix' branch에서 작업 및 테스트 마친 후 main branch로 merge
    • main branch에서 작업이 없었다면, 'fix' branch는 main branch에서 분기된 것이므로, 브랜치 포인터만 옮겨지는 방식(Fast forward)으로 merge
  7. 'issue' branch로 이동하여 작업 다시 진행
  8. 'issue' branch에서 작업 및 테스트 마친 후 main branch로 merge
    • main branch가 가리키는 커밋이, 'issue' branch의 조상이 아님으로, 각 브랜치가 기리키는 커밋 두개와 공통 조상을 하나로 사용하여 3-way merge를 하고 그 결과를 별도의 커밋으로 만들어 해당 브랜치가 별도의 커밋, 즉 Merge 커밋을 가리키도록 이동시킴.

📌 브랜치 병합 과정에서의 충돌

  • Merge 하는 두 브랜치에서 같은 파일의 한 부분을 동시에 수정했다면 해당 부분에서 Conflict 발생.
  1. merge 명령 후 Conflict 발생 시, git status 명령으로 어떤 파일이 Unmerged인지 확인하고, 해당 파일을 연다.
  2. 충돌이 발생 부분은 아래와 같이 표시 된다.
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
  • ======으로 충돌한 내용이 구분된다. 위쪽의 내용은 merge 명령을 실행할 때 작업하던 main branch, HEAD 버전의 내용이고, 아래는 합쳐진, merged 브랜치의 내용.
  1. 필요에 따라 내용을 고르거나 새로 작성하여 충돌된 내용을 정리하고, git addmerge 한다.

Refences

profile
ヾ(^▽^*)))

0개의 댓글