deploy/💾 Github

Git CLI를 이용한 브랜치 병합 (Merge) 방법

James Wetzel 2025. 5. 22. 12:19

 

Git CLI를 이용한 브랜치 병합 (Merge) 방법

목표: newBranchTest 브랜치에서 작업한 내용을 main 브랜치로 합치기.

현재 상태 (가정):

  • 로컬 저장소에 main 브랜치와 newBranchTest 브랜치가 모두 있습니다.
  • newBranchTest 브랜치에는 main 브랜치에 아직 없는 새로운 커밋들이 있습니다.
  • 현재 작업 중인 브랜치는 newBranchTest일 수 있습니다.

1단계: 현재 작업 디렉토리의 상태 확인 및 정리

병합을 시작하기 전에 현재 브랜치와 작업 디렉토리에 커밋되지 않은 변경사항이 없는지 확인하는 것이 중요합니다. 변경사항이 있다면 커밋하거나 임시 저장해야 합니다.

git status
  • 확인:
    • On branch <현재_브랜치_이름>: 현재 작업 중인 브랜치가 표시됩니다.
    • nothing to commit, working tree clean: 이 메시지가 뜨면 작업 디렉토리가 깨끗하다는 의미이므로 다음 단계로 진행할 수 있습니다.
  • 만약 커밋되지 않은 변경사항이 있다면:
    • 커밋: git add .git commit -m "WIP: 작업 중인 변경사항 임시 커밋"
    • 임시 저장 (Stash): git stash (나중에 git stash pop으로 다시 적용 가능)

2단계: main 브랜치로 이동 (체크아웃)

newBranchTest 브랜치의 변경사항을 받아들일 대상 브랜치인 main 브랜치로 이동해야 합니다.

git checkout main
# 또는 (Git 2.23 이상 버전)
git switch main
  • 확인: 터미널에 Switched to branch 'main' 또는 Switched to a new branch 'main'과 같은 메시지가 표시될 것입니다. 이제 현재 브랜치는 main입니다.

3단계: main 브랜치를 최신 상태로 업데이트 (선택 사항이지만 강력히 권장)

main 브랜치로 이동한 후, 원격 저장소(origin)의 main 브랜치에 다른 팀원이 푸시한 최신 변경사항이 있을 수 있으므로, 로컬 main 브랜치를 최신 상태로 동기화하는 것이 좋습니다. 이렇게 하면 나중에 발생할 수 있는 병합 충돌을 미리 감지하거나 피할 수 있습니다.

git pull origin main
  • 확인: 원격 저장소의 main 브랜치에서 변경사항을 성공적으로 가져왔는지 확인합니다.

4단계: newBranchTest 브랜치를 main 브랜치로 병합 (Merge)

이제 main 브랜치에 있으므로, newBranchTest 브랜치의 모든 변경사항을 현재 브랜치(main)로 병합합니다.

git merge newBranchTest
  • 예상되는 결과:
    • Fast-forward Merge (가장 흔함, 충돌 없음):
      main 브랜치가 newBranchTest 브랜치보다 뒤처져 있고, main 브랜치에 newBranchTest가 분기된 이후 새로운 커밋이 없다면, Git은 "Fast-forward" 병합을 수행합니다. 이는 새로운 병합 커밋을 만들지 않고, 단순히 main 브랜치의 포인터를 newBranchTest의 최신 커밋으로 이동시킵니다.
    • Updating <hash>..<hash> Fast-forward # (변경된 파일 목록이 표시됨)
    • Recursive Merge (3-way Merge, 충돌 가능성 있음):
      만약 main 브랜치에도 newBranchTest 브랜치에서 분기된 이후 새로운 커밋이 있거나, 두 브랜치에서 동일한 파일의 동일한 부분을 수정한 경우, Git은 "Recursive" 병합을 수행하고 병합 충돌(Merge Conflict)이 발생할 수 있습니다.
    • Auto-merging <파일_이름> CONFLICT (content): Merge conflict in <파일_이름> Automatic merge failed; fix conflicts and then commit the result.

5단계: 병합 충돌 해결 (충돌이 발생한 경우에만)

4단계에서 병합 충돌이 발생했다면, 다음 단계를 따릅니다. 충돌이 없다면 6단계로 건너뛰세요.

  1. 충돌 파일 확인:출력에서 Unmerged paths: 섹션에 충돌이 발생한 파일 목록이 빨간색으로 표시됩니다.
  2. git status
  3. 충돌 파일 열기:
    각 충돌 파일을 텍스트 에디터(VS Code, Cursor IDE 등)에서 엽니다. Git은 충돌 영역을 <<<<<<<, =======, >>>>>>> 마커로 표시합니다.
  4. <<<<<<< HEAD // main 브랜치의 내용 const message = "Hello from main"; ======= // newBranchTest 브랜치의 내용 const message = "Greetings from newBranchTest"; >>>>>>> newBranchTest
  5. 충돌 수동 해결:
    원하는 최종 코드를 남기고 모든 <<<<<<<, =======, >>>>>>> 마커를 삭제합니다. 이 과정에서 두 브랜치의 내용을 적절히 조합하여 최종 버전을 만듭니다.
  6. 해결된 파일 Staging Area에 추가:
    충돌을 해결한 파일들을 Git의 Staging Area에 추가합니다.
  7. git add <충돌_해결_파일1> <충돌_해결_파일2> ... # 또는 git add . # 모든 해결된 파일 추가
  8. 병합 커밋 완료:
    모든 충돌 파일이 해결되고 Staging Area에 추가되면, 병합 커밋을 완료합니다. Git은 기본 병합 커밋 메시지를 자동으로 제공합니다.(기본 커밋 메시지 (Merge branch 'newBranchTest' into main)를 그대로 사용하려면 에디터에서 파일을 저장하고 닫습니다. 필요하다면 메시지를 수정할 수 있습니다.)
  9. git commit

6단계: (선택 사항) newBranchTest 브랜치 삭제

병합이 성공적으로 완료되었고 더 이상 newBranchTest 브랜치가 필요 없다고 판단되면 삭제할 수 있습니다.

git branch -d newBranchTest
  • -d 옵션은 브랜치가 완전히 병합된 경우에만 삭제합니다.
  • 만약 브랜치에 병합되지 않은 커밋이 있는데도 강제로 삭제하고 싶다면 -D 옵션을 사용합니다 (주의해서 사용하세요! 데이터 손실 위험이 있습니다).
      git branch -D newBranchTest # 강제 삭제

7단계: (선택 사항) main 브랜치를 원격 저장소에 푸시

로컬 main 브랜치에 병합된 변경사항을 원격 저장소에 반영하려면 푸시해야 합니다.

git push origin main

이 단계들을 따라 하면 newBranchTest 브랜치의 변경사항을 main 브랜치로 성공적으로 병합하고 원격 저장소에 반영할 수 있습니다.

728x90
반응형