Infra/Git

[Git] branch를 합치는 방법

누구세연 2023. 10. 15. 17:38

브랜치를 합치는 방법은 Git에서 두 가지 방식으로 수행할 수 있습니다.

 

Merge(병합)


다른 브랜치의 변경 사항을 현재 브랜치에 통합하는 가장 간단하고 일반적인 방법입니다.

병합 커밋을 만들어 두 브랜치의 변경 사항을 하나로 합칩니다.

git checkout main
git merge feature

위의 명령어로 main 브랜치에 feature 브랜치를 Merge 할 수 있습니다.

 

장점

  • 간단하고 안정적인 방법으로 충돌이 발생할 경우 비교적 쉽게 해결할 수 있습니다.
  • 브랜치의 히스토리가 보존되므로 나중에 병합 작업을 추적하기 쉽습니다.

단점

  • 병합 커밋이 많은 이력을 만들 수 있으므로 히스토리가 복잡해질 수 있습니다.

Merge 되돌리는 방법

merge도 하나의 커밋이기 때문에 reset이라는 명령어로 되돌릴 수 있습니다.

git log

위 명령어를 통해 이전 커밋 히스토리를 확인합니다.

원하는 이전 상태의 커밋 ID를 찾은 후 다음 명령어를 사용하여 해당 커밋으로 되돌립니다.

git reset --hard 이전 커밋의 ID

위 명령어를 사용하면 현재 브랜치가 이전 상태로 되돌아갑니다.

그러나 주의해야 할 점은 이 명령어를 사용하면 이전의 변경 사항이 모두 사라지기 때문에 주의가 필요합니다.

이 작업을 수행하기 전에 변경 사항을 백업하거나, 되돌린 이후에 복구할 수 있는 방법을 찾아보는 것이 좋습니다.

 

Rebase(리베이스)


리베이스는 브랜치의 기록을 다른 브랜치의 최신 상태로 변경하는 과정입니다.

이를 통해 히스토리를 단순화하고 더 깔끔한 커밋 히스토리를 유지할 수 있습니다.

git checkout feature
git rebase main

위 명령어로 feature 브랜치를 main 브랜치의 최신 상태로 Rebase 할 수 있습니다.

 

장점

  • 히스토리가 선형으로 유지되므로 깔끔한 이력을 유지할 수 있습니다.
  • 병합 커밋이 생성되지 않기 때문에 이력이 단순해집니다.

단점

  • 충돌이 발생할 경우 해결하기가 다소 복잡할 수 있습니다.
  • 기존의 커밋 이력을 변경하므로 주의해야 합니다. 이미 원격 저장소에 푸시한 커밋을 리베이스 하면 문제가 발생할 수 있습니다.

Rebase 되돌리는 방법

아래 명령어를 사용하여 이전 HEAD 상태를 확인합니다.

git reflog

되돌리고자 하는 이전 HEAD 상태로 reset 명령어를 사용합니다.

git reset --hard HEAD@{이전 HEAD 순서}

여기서 '이전 HEAD 순서'는 git reflog 명령을 통해 확인한 이전 HEAD의 순서입니다.

이 명령어를 통해 리베이스를 이전 상태로 되돌릴 수 있습니다.

다만, 리베이스는 히스토리를 변경하는 작업이므로 주의가 필요합니다.

 

 

각 방법에는 장단점이 있으므로 상황에 따라 적절한 방법을 선택해야 합니다. 

추가로, 충돌이 발생할 수 있으므로 충돌을 해결하는 방법에 대해서도 알아두는 것이 좋습니다.