Git, Guthub (2)

gyungkyuBae·2023년 7월 13일
0

Git branch

git 에는 branch 라는 개념이 있습니다. (github 의 기능 ❌, git 자체적인 기능 ✅)

branch분기 라는 뜻을 가지고 있는데요, 말그대로 버전 관리의 분기점을 만드는 기능입니다.

  • 현재 작업 중인 내용을 유지하면서, 파일과 커밋 기록을 별도로 관리하고자 할 때, 브랜치를 분기하게 된다.
  • 브랜치를 분기하게 되면, 그때부터는 파일과 커밋 기록이 완전히 별도로 관리된다.
  • 브랜치는 얼마든지 추가로 더 만들 수 있는데, 항상 원본 브랜치가 있어야 분기 (새 브랜치를 만드는 것) 를 할 수 있다.

Git branch 생성

git branch [생성할 브런치 명] branch 를 새로 생성하는 명령어.

Git branch 의 목록

git branch --list branch의 목록들을 보는 명령어.

Git branch 전환

git switch [이동할 브런치 명] 이동하고 싶은 branch로 전환 하는 명령어.

Git branch 삭제

git branch -D [삭제할 브런치 명] branch를 삭제하는 명령어.

Git branch의 활용

branch 병합하기

git merge는 서로 다른 branch 의 작업 내용을 하나의 branch 로 통합하기 위한 명령어.

💡 중요한 것은 통합 (merge) 자체가 새로운 커밋이 되어서 기록이 남게된다는 점입니다.

merge 시의 merge conflict

merge conflict 는 git 이 하나의 파일 (의 commit 기록) 을 합치면서, 정확히 어떻게 합쳐야할지를 결정할 수 없을 때 발생
➡️ 대표적으로 merge conflict 가 발생하는 상황은 ‘같은 파일의 같은 부분을 수정했을 때’

해결 하는 방법

  • vs code 상에서, accept current change 를 누르면 현재 우리가 있는 main 브랜치의 내용을 따르게 되고, accept incoming change 를 누르면 병합하는 develop 브랜치의 내용을 따르게 되고, accept both changes 를 누르면 두 브랜치 내용 모두를 담게됩니다.
    혹은 꼭 버튼을 누르지 않더라도, 직접 내용을 수정

merge의 fast-forward

아래와 같은 상황에서 Merge를 한다면 어떤 일이 발생할까요

merge를 하게되면 동시에 새로운 줄기로 커밋이 나게 되는데, 코드상에서 겹치는 부분이 없다면
자동적으로 Fast-forward로 merge를 하기 때문에 새로운 줄기의 커밋기록이 아닌 기존에 있던
줄기가 이어지게 됩니다. (아래 사진 참고)
업로드중..

만약 아까처럼 줄기가 나눠진 형태로 커밋 기록을 남기고 싶다면? 아래와 같이 --no-ff 를 붙여서 merge 명령어를 입력하면 됩니다. (non fast forward 의 약자입니다.)

git merge develop --no-ff

  • 💡Fast-forward 개념이 중요한 이유는, 커밋 기록 (히스토리) 을 어떻게 관리할지 정할 때 사용되기 때문입니다. 만약 하나의 줄기로 관리를 하고자 한다면 아래에서 배울 rebase 와 함께 fast-forward 형태로 병합을 진행시키면 되고, 브랜치의 줄기를 남기고자 한다면 non fast-forward 형태로 병합을 진행시키면 되는 것입니다. 어떻게 관리할지는 팀에서 정하기 나름이지만, 보통은 non fast-forward 형태로 병합을 진행해서, 브랜치 작업을 확인할 수 있도록 기록을 남기는 경우가 많은 것 같습니다.

Github 의 Pull Request

Pull Request

‘내 담당 브랜치에서 작업이 완료되었으니, 이 브랜치의 코드를 가져가서 병합해주세요’ 라는 요청을 보내는 것

Pull Request를 하는 이유

  • 내가 작성한 코드가 바로 merge 될 경우 발생할 수 있는 문제를 미리 방지
  • 현재 코드에 대한 코드 리뷰를 진행
  • 프로젝트에 대한 진행 상황을 관리
profile
개발자

0개의 댓글