[GIT] 브랜치관리와 합병

hyelim·2023년 5월 5일
0

프로젝트관리

목록 보기
1/6
post-thumbnail

📌 브랜치관리와 합병

📌 시나리오

위의 상황을 간단하게 설명하면, 현재 even_list 라는 브랜치에서 작업하고 있다가, main에 급하게 반영되어야할 변경사항이 생겼다.
이를 해결하기 위해서는, hotfix라는 브랜치를 추가해 main과 합병하는 작업이 필요하다. 아래의 그림은 그 과정을 나타낸다

📌 해결방법

1️⃣

main브랜치에서는 새로운 커밋이 추가되지 않고 새로운 브랜치에서만 새로운 커밋이 추가되었을 경우 fast-forward 전략을 사용한다

  1. main 에서 작업중이다

    🐠 HEAD는 현재 작업 중인 브랜치의 가장 최근 커밋을 가리키는 포인터

  1. even_list라는 브랜치를 만들고 이 곳으로 브랜치를 전환한다

    🐠 브랜치를 새로 생성시 커밋이 새로 생성되는 것이 아닌, 단순히 새로운 포인터를 생성한다

  1. even_list 브랜치에서 파일을 변경한다

  2. 3번에서 변경한 파일이 modified 상태로 전환된다.

    🐠 GIT의 workflow

  3. 그 후 add, commit 과정을 거치면 아래와 같은 상태가 된다

    이 과정에서 문제를 발견해 main 브랜치로 전환 후 hotfix 브랜치를 새로 생성한다.

    그 후 아래와 같은 상태가 된다

  4. hotfix에서 아래와 같이 문제가 되는 부분을 수정한다

  5. 커밋한다

    아래와 같은 상태가 된다

  6. 최종적으로 아래와 같이 hotfix 브랜치와 main 브랜치가 merge되었다

    🐠 fast-forward 전략
    현재 브랜치의 HEAD가 가리키는 커밋과 병합하려는 브랜치의 HEAD가 가리키는 커밋 사이에 차이가 없는 경우, Git이 별도의 병합 커밋을 만들지 않고 단순히 브랜치의 HEAD를 최신 커밋으로 이동시키는 것

  7. hotfix브랜치는 main에 merge 되었기에 삭제해도 된다

    그 후 아래와 같은 상태가 된다

2️⃣

  1. merge되지 않은 브랜치를 삭제하려고 하면 아래와 같은 오류가 난다
  2. even_list 브랜치의 이름을 changed_even_list로 변경하고 해당 브랜치의 작업이 끝났다면, even_list 브랜치를 main으로 merge할 준비가 끝났다
  3. merge conflict 오류가 난다


  4. 문제를 해결하기 위해 아래의 작업을 진행한다

  5. 성공적으로 merge가 진행된 것을 확인할 수 있다

📌 새로운 브랜치에 main 내용 merge하기

📌 git 협업 할 때 branch 생성 후 pr까지의 과정

  1. 원격 저장소에서 내용을 로컬 저장소로 가져온다
    로컬 저장소가 없을 시 : git clone ~
    로컬 저장소가 이미 있을 시 : git pull origin main

  2. 로컬 저장소에서 작업할 브랜치를 생성 후 해당 브랜치로 이동한다
    git branch 브랜치이름
    git checkout 브랜치이름
    위에 명령어를 한 번에 치고 싶으면 : git checkout -b 브랜치이름

  3. 브랜치 안에서 원하는 작업을 수행한다

  4. 브랜치에서 수행한 작업을 git에 올린다
    git add .
    git commit -m ~
    원격 저장소에 해당 브랜치가 이미 존재할 때 : git push
    원격 저장소에 해당 브랜치가 없을 때 : git push origin 브랜치이름

    원격 저장소에 브랜치가 없다면 git push만 했을 때, upstream이 없다는 오류가 나게 된다.
    원격 저장소에 브랜치 생성 후 브랜치 내용 push를 해줘야 한다.

  5. 로컬 master 브랜치로 이동 후 원격 저장소의 main 변경사항을 pull 해준다
    (작업 중인 브랜치 안에서 명령어 실행)
    git checkout main
    (master 브랜치 안에서 명령어 실행)
    git pull origin main

    브랜치를 생성해서 작업을 하는 동안 다른 협업자가 원격 저장소의 main push를 진행해놓았을 수도 있다.
    그러므로 로컬의 main 브랜치로 이동 후 main 내용을 제일 최신으로 업데이트해준다.

  6. 다시 작업한 브랜치로 이동 후 로컬의 main 내용을 해당 브랜치에 merge!
    (작업 중인 브랜치 안에서 명령어 실행)
    git merge master
    git push

    merge 과정에서 conflict가 난다면 해결하자
    해당 과정을 통해 main과 merge 된 브랜치 내용이 원격 저장소 작업 브랜치에 업데이트되었다.

  7. github 홈페이지의 repository로 이동 후 pull request 요청을 하면 완료

  8. 담당자가 확인 후 pull request를 수락하면 원격 저장소 master에 브랜치의 내용이 업데이트된다

참고

OSSP SWE2021 수업 교안
https://developer-eun-diary.tistory.com/42

profile
기록용

0개의 댓글