주제 4
병합
검토를 마친 Pull Request를 GitHub에서 main에 병합하고, Windows의 VS Code 통합 터미널에서 로컬 main을 갱신합니다.
병합의 의미
병합은 작업 브랜치의 변경을 대상 브랜치에 반영하는 작업입니다. 이 안내에서는 검토가 끝난 Pull Request를 GitHub에서 main에 병합합니다.
GitHub는 Pull Request에 검토 의견과 병합 결과를 남깁니다. 선택한 병합 방식에 따라 main에 남는 커밋 이력은 달라집니다.
Pull Request 확인
Pull Request 상단에서 base: main과 compare: draft-section을 확인합니다. Files changed에서 병합할 파일 목록도 다시 살펴봅니다.
요청받은 수정과 팀 검토를 마쳤는지 확인합니다. 저장소가 승인이나 자동 검사를 필수로 지정했다면 통과 여부를 확인합니다. 마지막 검토 뒤 새 커밋이 올라왔다면 파일 차이를 다시 읽고 필요하면 재검토를 요청합니다.
Pull Request 병합
PR 하단에서 저장소가 허용하는 병합 방법을 확인합니다. Merge pull request는 개별 커밋과 병합 커밋을 남기고, Squash and merge는 변경을 한 커밋으로 묶으며, Rebase and merge는 커밋을 main 위에 다시 배치합니다. 팀 규칙이 있다면 그 방법을 선택합니다.
병합 상태를 확인한 뒤 선택한 방법의 버튼과 확인 버튼을 누릅니다. PR에 Merged가 표시되고 main에 변경이 반영됐는지 확인합니다. 팀에서 작업 브랜치를 더 쓰지 않는다면 그다음 Delete branch로 원격 브랜치를 정리할 수 있습니다.
로컬 main 갱신
GitHub에서 병합한 뒤 Windows의 VS Code 통합 터미널을 엽니다. git status로 미완료 변경을 확인해 정리하고 로컬 main으로 전환합니다. --ff-only를 사용해 GitHub의 main을 가져옵니다.
git status
git switch main
git pull --ff-only origin main
가져오기가 끝나면 git status로 현재 브랜치와 남은 변경을 확인하고, 병합한 파일이 로컬에도 반영됐는지 살펴봅니다. --ff-only가 거절되면 로컬 main에 별도 커밋이 있는지 확인합니다.
작업 브랜치에 main 반영하기
PR이 아직 열려 있고 main의 최신 변경을 작업 브랜치에 반영해야 할 때만 이 절차를 사용합니다. 먼저 미완료 변경을 정리하고 draft-section으로 이동합니다.
git status
git switch draft-section
git fetch origin
git merge origin/main
git fetch origin은 GitHub의 브랜치 정보를 갱신하고, git merge origin/main은 그 변경을 현재 draft-section에 반영합니다. 아래 기존 이미지는 new-contents에서 git pull origin main을 사용하다 충돌이 발생한 예시입니다.
두 브랜치의 변경이 충돌하면 Git이 병합을 멈추고 VS Code의 Source Control > Merge Changes에 해당 파일을 표시합니다. 충돌이 없으면 병합이 바로 끝날 수 있습니다.
충돌 파일의 내용을 결정하는 방법은 VS Code 공식 충돌 해결 안내에서 확인할 수 있습니다.
충돌 파일을 열어 최종 내용을 정하고 저장합니다. 해결한 파일만 Stage한 뒤 병합 완료 동작을 선택합니다. VS Code의 상태와 버전에 따라 Commit 또는 아래 예시의 Continue로 표시될 수 있습니다.
병합 커밋을 마치면 Source Control에 업로드할 커밋 수가 표시될 수 있습니다. 아래 기존 화면의 from_main은 예시 커밋 메시지입니다.
병합 커밋을 마친 뒤 git push로 작업 브랜치를 GitHub에 올립니다. 아래 기존 이미지의 Sync Changes는 Pull과 Push를 함께 실행할 수 있습니다.
Sync Changes를 선택했다면 확인 창의 Pull·Push 대상 브랜치를 읽습니다. 아래 기존 화면은 origin/를 보여주므로, draft-section에서 작업 중이라면 이름이 다를 때 취소하고 현재 브랜치를 다시 확인합니다.
아래 기존 이미지는 Git Graph에 병합 커밋이 표시된 사례입니다. 브랜치가 빠른 전진으로 갱신되면 별도 병합 커밋이 생기지 않을 수 있습니다.