본문 바로가기
IT/git

[git] Merge, Squash and Merge, Rebase and Merge

by 내일은교양왕 2024. 8. 14.

[Merge]

Fast-Forwarded Merge

새로운 branch A가 Main branch로부터 분기된 이후 Main branch에 새로운 커밋이 올라오지 않았다면, A가 최신 branch라고 할 수 있

다. 이 경우 A의 변경이력 그대로 Main으로 가져올 수 있다.

From https://github.com/insidedw/react-webpack5-ssr

   27eb3af..3d95fe7  main       -> origin/main

Updating 27eb3af..3d95fe7

Fast-forward

 

 

[Squash and Merge]

여러 개의 커밋을 하나로 합친 후 병합하는 방법입니다. 이 방식은 특히 협업 과정에서 여러 사람이 같은 기능을 개발하거나 버그를 수정할 때 유용합니다.

 

커밋 히스토리 정리: 여러 개의 커밋을 하나로 압축(squash)하여 병합하므로, Git 히스토리가 깔끔해집니다. 기능 개발이나 버그 수정 작업  발생한 자잘한 커밋들이 하나의 커밋으로 통합되기 때문에, 메인 브랜치의 히스토리가 간결하게 유지됩니다.

 

하나의 커밋 메시지: Squash and Merge 수행할 , 병합 대상이 되는 여러 커밋의 메시지를 조합하거나 하나로 수정할  있습니다. 이로 인해 해당 작업의 의도가 명확하게 기록됩니다.

 

브랜치 히스토리 보존: Squash and Merge 브랜치를 병합하면서도 메인 브랜치의 히스토리를 깨끗하게 유지할  있어, 기능이나 버그 수정을 위해 임시로 만든 브랜치의 작업 내역을 하나의 커밋으로 요약합니다.

git merge --squash my-branch

 

[Rebase and Merge]

두 브랜치를 병합할 때 사용하는 방법 중 하나입니다. 이 방식은 병합하는 과정에서 커밋 히스토리를 재구성하여, 보다 깔끔하고 일관된 Git 히스토리를 유지할 수 있도록 합니다.

 

리베이스(Rebase): 리베이스는 커밋을 현재 브랜치의 기반(base)에서 다른 브랜치의 최신 커밋 위로 이동시키는 작업입니다. 즉, 브랜치의 히스토리를 다른 브랜치의 최신 상태로 재배치하는 것입니다. 이렇게 하면 두 브랜치의 커밋 히스토리가 직선으로 이어지게 되어, Git 로그가 보다 깔끔하게 정리됩니다.

 

충돌 해결: 리베이스 과정에서 충돌이 발생할 경우, 이를 수동으로 해결하고 다시 리베이스 과정을 이어나갑니다. 이로 인해 최종 병합 시점에는 충돌이 없는 상태로 병합됩니다.

 

병합 커밋 없음: Rebase and Merge를 사용하면 별도의 병합 커밋(merge commit)이 생성되지 않습니다. 이는 Git 히스토리가 더 단순해지고, 브랜치 간의 병합 흔적이 깔끔하게 정리된다는 것을 의미합니다.

 

브랜치 히스토리 재구성: 리베이스 과정에서 병합될 브랜치의 커밋들이 일렬로 재구성되기 때문에, 히스토리를 확인할 때 이해하기 쉬운 직관적인 형태로 유지됩니다.

git checkout -b test-branch
git rebase main
git checkout main

git merge test-branch
git push

'IT > git' 카테고리의 다른 글

[git] .env file 무시 설정 반영되지 않을 때  (2) 2024.03.31
Git - remote: Invalid username or password  (0) 2023.07.06
GIT - Revert  (0) 2023.06.19
GIT - pull 에러 잡기  (0) 2023.06.18
GIT - pull, push, clone이 명령어로 안될 때  (0) 2023.06.13