Git 브랜치 병합(Merge) 방법
Git 브랜치 병합(Merge) 방법
Git에서는 분리된 작업을 효율적으로 관리하기 위해 브랜치를 사용합니다. 작업을 완료한 후에는 해당 브랜치를 병합하여 주요 브랜치에 통합해야 합니다. 이번 글에서는 Git에서 브랜치를 병합하는 방법과 병합 충돌을 해결하는 방법을 단계별로 살펴보겠습니다.
1. 브랜치 병합의 기본 개념
Git에서 병합은 한 브랜치의 변경 사항을 다른 브랜치에 통합하는 과정입니다.
병합에는 두 가지 주요 방식이 있습니다: - Fast-forward 병합: 대상 브랜치가 원본 브랜치의 후속 커밋인 경우, 간단히 커밋을 앞으로 이동시킵니다. - 3-way 병합: 두 브랜치가 서로 다른 변경 사항을 포함한 경우, 공통 조상을 기준으로 변경 내용을 병합합니다.
다음은 브랜치 병합의 텍스트 그래프 예시입니다:
*---*---*---* (main)
\
*---*---* (feature-branch)
2. 브랜치 병합 준비하기
먼저 병합할 브랜치를 확인해야 합니다. 현재 프로젝트의 브랜치 목록을 보려면 다음 명령어를 사용합니다:
git branch
출력 예시:
* main
feature-branch
병합을 진행하기 전에 병합 대상 브랜치(예: main
)로 전환합니다:
git switch main
3. Fast-forward 병합
Fast-forward 병합은 대상 브랜치가 원본 브랜치의 최신 커밋을 가리키는 경우에 발생합니다.
명령어:
git merge <병합할 브랜치>
예시:
git merge feature-branch
병합이 성공하면 main
브랜치에 feature-branch
의 커밋이 통합됩니다.
병합 후 텍스트 그래프는 다음과 같습니다:
*---*---*---*---*---* (main)
4. 3-way 병합
main
브랜치와 feature-branch
가 서로 다른 변경 사항을 포함한 경우, 3-way 병합이 필요합니다.
명령어:
git merge <병합할 브랜치>
예시:
git merge feature-branch
이 과정에서 Git이 자동으로 병합 가능한 경우, 새 병합 커밋이 생성됩니다. 생성된 커밋은 보통 다음과 같은 메시지를 포함합니다:
Merge branch 'feature-branch' into main
병합 후 텍스트 그래프는 다음과 같습니다:
*---*---*---* (main)
\ \
*---*---* (feature-branch)
|
* (merge commit)
5. 병합 충돌 해결하기
병합 충돌은 Git이 두 브랜치 간의 변경 사항을 자동으로 병합할 수 없을 때 발생합니다. 이 경우, 충돌을 수동으로 해결해야 합니다.
충돌 상황 확인하기
충돌이 발생하면 Git은 다음과 같은 메시지를 표시합니다:
CONFLICT (content): Merge conflict in <파일 이름>
충돌 상태를 확인하려면 다음 명령어를 사용합니다:
git status
출력 예시:
On branch main
You have unmerged paths.
(use "git restore --staged <file>..." to unstage)
Unmerged paths:
both modified: <파일 이름>
충돌 해결하기
- 충돌이 발생한 파일을 열어,
<<<<<<<
,=======
,>>>>>>>
와 같은 충돌 표시를 찾습니다. - 원하는 코드로 수정한 후 저장합니다.
- 수정한 파일을 단계 영역에 추가합니다:
git add <파일 이름>
- 병합을 완료합니다:
git commit
6. 병합 로그 확인하기
병합 히스토리를 확인하려면 다음 명령어를 사용합니다:
git log --graph --oneline
출력 예시:
* abc1234 (HEAD -> main) Merge branch 'feature-branch'
|\
| * def5678 (feature-branch) Add new feature
* | ghi9012 Update main branch
|/
7. 병합 취소하기
병합 후 문제가 발생한 경우, 병합을 취소할 수 있습니다.
병합을 완료하지 않은 상태에서 취소하기
git merge --abort
병합 후 되돌리기
이미 병합 커밋이 생성된 경우:
git revert -m 1 <병합 커밋 해시>
8. 유용한 팁
병합 전 충돌 미리 확인: 병합 전에 충돌 가능성을 미리 확인하려면 다음 명령어를 사용하세요:
git merge --no-commit --no-ff <병합할 브랜치>
병합 전략 변경: 필요에 따라 병합 전략을 명시적으로 설정할 수 있습니다:
git merge --strategy=<전략 이름> <병합할 브랜치>
예:
recursive
,ours
,theirs
등.