pooney
article thumbnail
Published 2024. 3. 20. 22:47
<GIT> git pull의 merge history는 ? GIT

안녕하세요 오늘은 git에서 pull을 하면 merge hitsory는 어떻게 되는지 알아보려고 합니다. 일반적으로 프로젝트를 진행하면서 git에서 가장 많이 사용 하는게 pull 아닐까 싶은데요. 주기적으로 pull을 하면서 충돌의 위험성을 감소 할 수 있는 강력한 기능입니다. 여기서 git pull에 대해서 모르시는 분들이 있으 실 수 있으니 간단히 설명자면 fetch + merge 라고 생각하시면 됩니다. 

 

 

 

 

PULL = Fetch + Merge


 

 

즉, Fetch를 통해 원격 저장소에서 최신 커밋 이력을 가지고오고 Merge를 통해 현재 브랜치에 병합을 해준다. 라고 볼 수 있습니다. 그러면 여기서 생각이 드는 것은 Merge 이력은 무조건 만들어 지겠지? 라는 것입니다. 물론 옵션에 따라 다르겠지만 대부분 intellij와 같은 IDE를 이용하실 건데요 intellij에서는 기본적으로 Fast forward 를 사용합니다.  

 

 

Fast forward는 A-BRACH와 B-BRANCH가 있을때  B-BRANCH가 A-BRANCH를 포함하고 있으면 별다른 MERGE 이력을 남기지 않고 HEAD를 변경함으로써 작업을 끝냅니다.

 

 

 

 

 

 

 

 

 

위의 그림은 Master에서 A-BRANCH와 B-RANCH를 만들고 B-BRANCH에서는 B-1,B-2 커밋 이력을 발생 실켰을떄의 그림을 표현한 것입니다.

 

 

 

저상황은 A-BRANCH에서는 COMMIT의 변화가 없고 B-BRANCH 에서 이력이 발생했을때 인데요 이경우 B-BRANCH가 A-BRANCH를 포함하고 있습니다. 이때 A-BRANCH에 B-BRANCH를 PULL 하면 어떻게 될까요?  당연히 Merge가 되고 Merge 이력이 남겠죠? 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

하지만 Fast forward이기 때문에 Merge이력은 남지 않습니다.  

 

 

 

 

 

 

 

 

위의 그림이  Fast forward 의 결과인데요 보시면 HEAD가 "B-2 추가 이력" 을 보는것을 알 수 있습니다. 포함하는 브랜치를 merge 하는 경우에는 Merge이력을 남기는 것이 아닌 HEAD를 변경함으로써 병합을 하는 것을 확인 할 수가 있습니다. 

 

 

 

 

 

 

 

 

그러면 만약 A-BRANCH에서 COMMIT 이력이 존재하면 어떻게 될까요? 

 

 

 

 

 

 

 

 

 

 

 

위의 그림은 이력이 발생 했을 때의 그림입니다.  즉 B-BRANCH가 A-BRANCH를 포함하지 않는 상황인데요 이경우에는 아래와 같이 Merge이력을 남기고 병합을 진행하게 됩니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

프로젝트를 진행하면서 왜 PULL을 받았는데 Merge이력이 안남지? 라는 의문을 품으면서  공부하게 되었는데요 저도 GIT을 제일 많이 사용하지만 정확하게 어떻게 동작하는지 모르고 사용한것 같습니다.  이기회에서 동작원리를 공부하면서 기록을 해보았습니다. 틀린 부분이 있을 수 있으니 피드백 부탁드립니다. 

 

 

 

 

 

 

 

 

 

 

 

 

'GIT' 카테고리의 다른 글

Git 강제로 덮어쓰기  (0) 2020.06.15
git 되돌아가기  (0) 2020.04.06
profile

pooney

@pooney

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!