Git Merge
마지막 업데이트
git merge는 다른 브랜치의 커밋을 현재 브랜치로 가져옵니다. 현재 브랜치가 갈라지지 않았을 때 Git은 fast-forward를 수행하여 포인터를 앞으로 옮기기만 합니다. 두 브랜치 모두에 새로운 커밋이 있으면 Git은 두 히스토리를 하나로 연결하는 병합 커밋을 만듭니다. rebase와 달리 merge는 두 브랜치의 정확한 히스토리를 그대로 보존합니다.
터미널 플레이그라운드에서 직접 해보세요. 브라우저에서 실행되는 진짜 셸이며, 설치할 것이 없습니다.
구문
| Command | What it does |
|---|---|
git merge feature | feature를 현재 브랜치에 병합 |
git merge --no-ff feature | 항상 병합 커밋을 생성 |
git merge --ff-only feature | fast-forward가 가능할 때만 병합 |
git merge --squash feature | 브랜치의 커밋들을 하나로 합침 |
git merge --abort | 충돌이 발생한 병합을 취소 |
Fast-forward vs 병합 커밋
| Scenario | Fast-forward | Merge commit (--no-ff) |
|---|---|---|
| 새 커밋을 생성 | 아니오 | 예 |
| 브랜치의 기록을 남김 | 아니오 | 예 |
| 발생하는 경우 | 현재 브랜치가 갈라지지 않음 | 두 브랜치 모두에 새 커밋이 있음 |
병합 충돌 해결
두 브랜치가 같은 줄을 변경했을 때 Git은 잠시 멈춥니다.
| Step | Command | Result |
|---|---|---|
| 1 | 충돌한 파일을 편집 | 올바른 줄을 선택하고 마커를 제거 |
| 2 | git add <file> | 충돌을 해결됨으로 표시 |
| 3 | git commit | 병합을 완료 |
git merge 자주 묻는 질문
Git에서 한 브랜치를 다른 브랜치에 병합하려면 어떻게 하나요?
병합할 대상 브랜치로 전환한 다음(예:
git switch main) git merge feature를 실행하세요. Git은 feature의 커밋을 main으로 합치는데, fast-forward를 하거나 두 브랜치가 갈라진 경우 병합 커밋을 생성합니다.fast-forward와 병합 커밋의 차이는 무엇인가요?
fast-forward는 다른 브랜치가 갈라진 이후로 현재 브랜치가 움직이지 않았을 때 발생합니다. Git은 새 커밋 없이 포인터를 앞으로 밀기만 합니다. 병합 커밋은 두 브랜치 모두에 새 커밋이 있을 때 생성되어 두 히스토리를 연결합니다. 항상 병합 커밋을 만들려면
--no-ff를, fast-forward를 강제하려면 --ff-only를 사용하세요.병합 충돌은 어떻게 해결하나요?
병합에서 충돌이 발생하면 Git은 영향을 받은 파일에서 충돌하는 부분을
<<<<<<<, =======, >>>>>>> 마커로 표시합니다. 각 파일을 편집해 올바른 내용을 남기고 마커를 제거한 다음, 해결한 파일을 git add하고 git commit으로 병합을 마칩니다.병합을 되돌리거나 중단하려면 어떻게 하나요?
병합이 아직 진행 중이라면(충돌 미해결)
git merge --abort를 실행해 취소하고 병합 이전 상태로 되돌립니다. 병합이 로컬에서 이미 완료되었다면 git reset --hard ORIG_HEAD가 브랜치를 병합 이전 위치로 되돌립니다(HEAD~1과 달리 fast-forward 이후에도 정확하지만, 커밋하지 않은 작업은 버립니다). 병합이 푸시되었다면 git revert -m 1 <merge-hash>를 사용하세요.이것을 온라인으로 연습할 수 있나요?
네. 터미널 플레이그라운드를 열어 브라우저에서 실행되는 진짜 셸로
git merge를 실행해 보세요. 설치할 것이 없습니다. Coddy의 무료 인터랙티브 Git 강좌에서도 병합과 충돌 해결을 단계별로 다룹니다.