Notice
Recent Posts
Recent Comments
Link
관리 메뉴

데브마우스

[Git] 브랜치 병합 정리 본문

Git/Git: 정리

[Git] 브랜치 병합 정리

데브마우스 2024. 1. 10. 10:51

Git 브랜치를 병합(merge)할 때 주의할 점

Git 브랜치를 병합 하기 전에는 main 혹은 master 브랜치에서 병합해야합니다.

git switch [main|master]
git merge [병합할_브랜치_이름]

 

브랜치(분기) 시각화 자료
        main    
           
work1 분기 main
work2
   
           
    test2
work2
   
           
        test2 2. test2가 test2 work2 커밋을 가리킴
           
        HEAD 1. HEAD가 test2 브랜치를 가리킴

Fast-forward 병합이란 무엇인가요?

main 브랜치에서 브랜치 분기 후 main 브랜치에 아무 변화가 없다면 분기 후 브랜치를 병합하는 것은 간단합니다. 자동으로 병합되며 터미널에 Fast-forward가 출력됩니다.

다른 브랜치에서 한 문서의 다른 부분을 수정했을 때 병합하는 방법 정리

브랜치 시작점   브랜치 파일 내용
work1 work2 #title
content
main content 2

#title
content
     
  work2
o2 <- HEAD
#title
content


#title
content
o2 content 2

위와 같은 상황일 때 병합(merge)를 시도하면 각자의 브랜치 모두 서로 다른 부분만 수정하였기에 문제없이 병합(merge)이 잘 이루어지는걸 확인하실 수 있습니다.

서로 다른 브랜치에서 한 문서의 같은 부분을 수정했을 때 병합하기

한 문서의 같은 부분을 수정하면 충돌(Conflict)이 발생하며 아래와 같은 경고가 콘솔창에 출력합니다.Auto-merging work.txt
CONFLICT (content): Merge conflict in work.txt
Automatic merge failed; fix conflicts and then commit the result.
----------충돌이 발생한 파일입니다.----------

#title
content
<<<<<<< HEAD
main content 2 main의 내용입니다.
======= 구분선입니다.
o2 content 2 o2의 내용입니다.
>>>>>>> o2
#title
content

----------<<<<<<<와 ======= 사이의 내용은 현재 브랜치(main)를 의미합니다.========와 >>>>>> 사이의 내용은 다른 브랜치(o2)를 의미합니다.

 

git은 충돌이 발생하였을 때 병합의 기준을 가지고 있지 않기 때문에 개발자가 직접 파일을 수정하신 후 commit 명령어로 commit 하셔야합니다.

 

병합 및 충돌 해결 프로그램

병합 및 충돌을 자동으로 처리해주는 프로그램은 아래와 같습니다. 아래 프로그램 외에도 다양한 프로그램이 있습니다.

  • P4Merge
  • meld
  • Kdiff3
  • Araxis Merge

병합이 끝난 후 브랜치 삭제하는 방법

git branch -d [브랜치 이름]
git branch -D [브랜치 이름]

git branch -d와 -D모두 브랜치를 삭제하지만 -d는 병합이 끝난 브랜치만 삭제하며 -D는 병합이 끝나지 않은 브랜치도 삭제할 수 있다는 특징이 있습니다.

 

브랜치를 삭제한다고 해도 숨기는 것에 지나지 않습니다. 삭제한 브랜치와 같은 이름으로 브랜치를 생성하면 이전에 작업 내용이 그대로 나타납니다.

Cherry-pick으로 병합하는 방법

cherry-pic은 main 브랜치와 다른 브랜치를 병합하지만 브랜치 전체를 합치는게 아니라, 다른 브랜치의 특정 버전의 변경 내용만 합치려고할 때 사용하는, 부분 병합 기능을 제공합니다.