개발지식/git

0902 포트폴리오 / 협업 환경 구성 (4) - git 브랜치 전략, 충돌 해결

thinktank911 2025. 9. 2. 09:52

git 커리큘럼 중에서 가장 배우고 싶었던 것이 branch를 어떻게 협업에 활용하는지랑 충돌을 해결하는 방법이었는데 가장 도움이 됐던 수업이었다. 브랜치 개념을 명확하게 이해할 수 있었다.


깃 브랜치 이름 규칙

메인 브랜치 v1.2.0

  • 기능 개발 : feature/login, feature/select-product
  • 출시 준비 : relrease-1.3, relrease-1.4
  • 긴급 수정 : hotfix-1.2.1

깃 브랜치 규칙에 따라 만들기

  • git branch feature/login
  • git branch feature/select-product
  • git branch -d dev : dev 브랜치 삭제

병렬 개발 확인

  • 커밋해야 그때부터 브랜치
  • 커밋 전까진 포인트가 안 움직임
  • 커밋 전에 현재 해당 브랜치에 위치하고 있는지 한번 더 확인한다.
    • VS code 같은 경우 좌측 하단에 브랜치 확인 가능
    • commit은 롤백이 불가능하므로 주의 필요

feature/login 커밋 히스토리 화면
feature/select-product 커밋 히스토리 화면


원격 브랜치 실습

깃허브에 브랜치 옮기는 법

  • 깃허브에 있는 브랜치 조회
    • git branch -r
  • 깃허브에 브랜치 생성하고, 깃 브랜치 복제
    • git push 깃허브저장소별칭 깃브랜치명 : git push origin feature/login


깃 브랜치 전략

깃 플로우라고도 부른다. 전략은 다양하게 짤 수 있다

  • fast forward
  • 3-way

1) fast-worward 전략

A branch(main)에서 B branch(feature/login)를 생성한 시점부터

  • A branch에서 아무런 추가 구현을 하지 않고
  • B branch만 추가 구현한 뒤

B branch와 A branch를 합치면, A branch에 그냥 B branch가 붙으면 끝남
-> 자주 쓰이는 편 아님

fast-worward 전략

2) 3-way 전략
일반적으로 가장 많이 사용하는 전략
A branch(main)에서 B branch(feature/login)를 생성한 시점부터,

  • A branch도 추가 구현을 하고
  • B branch도 추가 구현을 하고

B branch와 A branch를 합치면, A branch와 B branch가 서로 비교하여 바뀐 것을 정리하여 합치는 전략

3-way 전략


병합과 충돌 - pull request & merge

  1. Pull Request

<깃허브 공간>

  • compare & pull request

  • pr(pull request) 던지기
    • feature/login으로 이동
    • contributes > open pull request
      • write 내용 적는 팁
        • 뭐 구현했는지 적기 : markdown 적용 가능
        • 주요구현내용 : 로그인 / 계정정보 / 비밀번호 알고리즘...
        • 이슈 : 알고리즘 구현 시, A에러가 있어 B알고리즘으로 대체

Create pull request : description 내용 잘 쓰기
no conflicts with base branch > Merge pull request
Merge에 대한 커밋메세지 확인 후 Confirm Merge
Delete branch
main branch에서 커밋 이력 확인 가능

※ pr 하기 전 권고사항

  • 깃허브 main branch 이동
  • protect this branch
  • branch protection rule
    • require a pull request before merging
    • password 입력 confirm

<이슈>
강의에선 main branch 이동 시 protect this branch 알림 문구가 떴으나 나는 뜨지 않아서 직접 경로 이동해서 들어갔다.

branch protection rule 설정

개념정리

  • 병합이란
    • 브랜치 생성은 협업을 위한 것
    • 브랜치 병합(추가 가지 -> base 가지)을 깃허브에서 함
  • Pull Request 전에 main 브랜치 보호가 요구된다.
  • Pull Request : 추가 브랜치 -> main 브랜치 병합 시켜줘
  • 깃허브가 충돌 자동으로 확인
    • PR 메세지 중요
  • merge한다.
  • merge를 commit한다.
  • branch를 삭제한다.

merge된 깃허브 -> 깃에 동기화

터미널에서 확인했을 때 삭제한 브랜치가 깃허브에 살아있음

  • git pull origin feature/login
  • 없다고 나옴
  • 동기화 필요 : git fetch -p
    • 깃허브의 브랜치를 동기화하는 명령어
  • 깃허브 branch 조회 : git branch -r
    • 깃헙에서 사라진 것 확인 가능

깃허브의 브랜치 동기화

  • 로컬에서 브랜치 삭제
    • main으로 이동 : git checkout main
    • 브랜치 삭제 : git branch -d feature/login
  • 머지 안됐다고 나옴
    • 메인도 동기화 필요 : git pull origin main
    • git log 찍어보면 머지 커밋 찍혀 있음
  • 브랜치 삭제 : git branch -d feature/login

main의 머지 커밋 동기화
깃 브랜치 삭제

정리

  • git fetch -p : 깃허브 브랜치 목록 동기화
  • 로컬 브랜치 삭제
    • git checkout main : 메인 이동
    • git pull origin main : 메인 동기화
    • git branch -d feature/login : 브랜치 삭제

충돌 해결하기

feature/1과 feature/2 따로 개발해서 머지해보기

깃허브
  • 깃허브에서 브랜치 생성
    • feature/1 브랜치 생성
    • feature/2 브랜치 생성

feature/1
  • main 브랜치 하나 남기기
  • 깃허브 브랜치 동기화 : git fetch -p
  • 깃허브 브랜치 조회 : git branch -r
  • 깃허브 브랜치를 로컬에 연결 : git checkout -t origin/feature/1
  • test.txt 변경 : feature1
  • git add
  • git commit : feature1 commit
  • git push
  • 깃허브 확인

feature/2
  • main 브랜치 하나 남기기
  • 깃 동기화 : git pull origin main
  • 깃허브 브랜치 동기화 : git fetch -p
  • 깃허브 브랜치 조회 : git branch -r
  • 깃허브 브랜치를 로컬에 연결 : git checkout -t origin/feature/2
  • test.txt 변경 : feature2
  • git add
  • git commit : feature2 commit
  • git push
  • 깃허브 확인

좌우 푸시 후 깃허브 pull request
  • feature1부터 진행
    • merge > confirm >delete branch

  • feature2 pull request 요청
    • 자동 머지 못함
    • 충돌 일어남 > resolve conflict

  • feature2 살리기로 결정 > 지우기
    • Mark as resolved 클릭
    • Commit Merge

  • merge pull request
  • delete branch

로컬 feature/1과 feature/2

<깃허브 머지 후>

  • 깃허브 브랜치 동기화 : git fetch -p
  • main으로 이동 : git checkout main
  • main 동기화 : git pull origin main
  • 기능 branch 삭제 : git branch -d feature/1 & git branch -d feature/2

 


>>학습 외 활동<<

깃허브 브랜치 삭제