초보도 쉽게 이해하는 git merge 완벽 정리

초보도 쉽게 이해하는 git merge 완벽 정리
Git Logo

git merge의 필요성

개발 프로젝트에서 팀원들과 협업하며 일하다 보면 다양한 버전의 코드를 효율적으로 관리해야 하는 상황이 자주 발생합니다. 바로 이때, git merge가 빛을 발합니다. 이 아티클에서는 git merge의 개념과 사용법을 초보자도 쉽게 이해할 수 있도록 구체적으로 설명하겠습니다. 어렵게 느껴질 수 있는 병합 과정도 한 단계씩 따라가면 어렵지 않게 익힐 수 있을 것입니다. 준비되셨나요? 시작해보겠습니다!


git merge의 단계별 이해

단계 1: Branch 이해하기

git branch feature
git checkout feature
  • branch: 현재 진행중인 작업을 분리하고 독립적으로 개발을 진행할 수 있게 해줍니다.
  • checkout: 특정 브랜치로 이동합니다.

branch에 대해 더욱 자세히 알고 싶으신가요?

단계 2: Merge 준비하기

git checkout master
git merge feature
  • checkout master: 병합할 대상 브랜치로 이동합니다.
  • merge: feature 브랜치와 master 브랜치를 병합합니다.

단계 3: 충돌 해결하기 (해당 시)

코드를 병합할 때 같은 부분을 동시에 수정한 경우 충돌이 발생할 수 있습니다. 이런 상황을 해결하지 않으면 코드는 작동하지 않을 것입니다.

git checkout master
git merge feature

이 명령어가 충돌을 일으킨다면, 충돌이 발생한 파일을 열어봐야 합니다. 코드 편집기(예: Visual Studi Code)를 통하여 확인하면 더욱 쉽게 확인할 수 있습니다.

<<<<<<< HEAD
내용 A
=======
내용 B
>>>>>>> feature

이것은master 브랜치에는 "내용 A"가 있고, feature 브랜치에는 "내용 B"가 있음을 의미합니다. 이럴 경우에는 수동으로 충돌을 해결해야 합니다.

단계 4: 병합 완료하기

충돌이 해결되면, 병합을 완료합니다.

git add .
git commit -m "병합 완료"

단계별로 차근차근 알아보기

git merge 플로우 차트

전체적인 플로우를 한 눈에 볼까요? 이 플로우 차트를 통해 git merge의 전체 프로세스를 한 눈에 볼 수 있습니다.

graph TD; A[Branch 생성 및 이동] --> B[Merge 준비]; B --> C[충돌 있는지 확인]; C -->|Yes| D[충돌 해결]; C -->|No| E[Merge 완료]; D --> E;

단계 별 Merge 과정

Branch 생성: 새로운 기능을 개발할 때 사용할 새 브랜치를 생성합니다.

git branch feature-name
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true,'showCommitLabel': true}} }%% gitGraph: commit branch feature-name

Branch로 이동: 새로 생성한 브랜치로 이동하여 작업을 시작합니다.

git checkout feature-name
Output: Switched to branch 'feature-name'
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true,'showCommitLabel': true}} }%% gitGraph: commit branch feature-name checkout feature-name

변경 사항 커밋: 변경된 사항을 커밋하여 추적합니다. 이렇게 하면 나중에 변경 내역을 확인하거나 되돌릴 수 있습니다.

git commit -m "commit message"
Output: [feature-name abc1234] commit message
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true,'showCommitLabel': true}} }%% gitGraph: commit branch feature-name checkout feature-name commit

대상 브랜치로 이동: 변경사항을 병합할 대상 브랜치로 이동합니다.

git checkout master
Output: Switched to branch 'master'
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true,'showCommitLabel': true}} }%% gitGraph: commit branch feature-name checkout feature-name commit checkout main

Merge 수행: 새로운 브랜치의 변경사항을 현재 브랜치에 병합합니다.

git merge feature-name
Output: Updating a20abac..5f4b5e4 Fast-forward
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true,'showCommitLabel': true}} }%% gitGraph: commit branch feature-name checkout feature-name commit checkout main merge feature-name

충돌 해결: 충돌이 발생한 경우 수동으로 수정하고 병합을 완료합니다.

git add .
git commit -m "병합 완료"
Output: [master c0c4b2e] 병합 완료
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true,'showCommitLabel': true}} }%% gitGraph: commit branch feature-name checkout feature-name commit checkout main merge feature-name

병합 완료 후 정리: 불필요한 브랜치는 삭제하여 관리를 편리하게 합니다.

git branch -d feature-name
Output: Deleted branch feature-name (was 5f4b5e4).

결론

git merge는 처음에는 다소 복잡해 보일 수 있지만, 명확한 단계와 실습을 통해 쉽게 익힐 수 있습니다. 충돌 해결은 처음에는 어려울 수 있지만, 협업을 하다보면 반드시 일어나게 되어있고, 의사소통과 git 스킬을 활용해서 해결할 수 있습니다. 협업의 핵심이자 코드의 효율적 관리를 위해 git merge는 필수적인 스킬로 남을 수 있습니다 !

함께 읽으면 좋은 글

http, https, hsts의 차이와 이해: HTTP vs HSTS vs HTTPS
들어가며 웹 세상은 매일 수많은 데이터 패킷이 오가는 복잡한 생태계입니다. 이 글에서는 HTTP, HTTPS, 그리고 HSTS에 대한 깊은 이해를 목표로 합니다. 개발자라면 이러한 기초적인 웹 통신 규약에 대해 확실히 알고 있어야 웹 애플리케이션의 보안과 성능을 최적화할 수 있습니다. HTTP(HyperText Transfer Protocol): 웹의 기초 HTTP란? HTTP는 HyperText Transfer Protocol의 약자로,
Git pull vs Git Fetch 차이점 완벽 분석하기
git pull, git fetch가 뭐야? Git이란 무엇인가? Git은 코드의 변경을 추적하고 여러 사람들과 협력하기 위한 분산 버전 관리 시스템입니다. git pull과 git fetch의 필요성 git pull과 git fetch 는 개발 할 때 정말 많이 사용 하는 git 명령어 중 하나입니다. 둘의 차이를 한 마디로 요약하자면 merge(Merge에 대해 알아보기)를
git rebase 3분 안에 이해하기
서론 안녕하세요 ! 이번에는 git의 핵심 중 하나인 rebase에 대해 깊게 다뤄볼 것입니다. 이 포스트를 통해 rebase와 관련된 기본부터 고급 기술까지 모두 파악하실 수 있을 거에요. 1. git rebase의 기본 개념 먼저, rebase는 무엇인가요? rebase는 글자 그대로 ‘다시 기반을 다지다’라는 뜻입니다. git에서는 두 가지 브랜치의 기반을 다시 다져주는 역할을 합니다. 다음과