IT탐험

병합과 충돌(merge, rebase) 본문

공부내용정리/Git

병합과 충돌(merge, rebase)

watercase 2021. 12. 27. 19:09
  • merge : 분리된 각각의 브랜치에서 수정된 사항을 하나의 브랜치로 합치는 것을 병합이라 함
    • <!-- 현재 브랜치를 기준으로 다른 브런치의 모든 커밋을 병합 -->
      git merge 브랜치이름
    • Fast-Forward (빨리감기) 병합 : 기준 브랜치에 추가된 커밋이 없을때 파생 브랜치의 순차적 커밋에 맞추어 병합을 처리함
    • 3-way 병합 : 공통 조상 커밋과 새로운 두 브랜치를 하나로 병합한다고 해서 3-way 병합으로 불림
      • 병합이 완료되면 새로운 커밋을 하나 생성하여 병합 커밋이라 부름
      • 병합 커밋은 부모 커밋이 2개인 특징이 있음
    • <!-- 병합 메시지 기록 -->
      git merge 브랜치이름 --edit
      
      <!-- 병합 후 브랜치 삭제 -->
      git branch -d 브랜치이름
      
      <!-- 실행한 병합 취소 -->
      git merge --abort
      
      <!-- 브랜치 병합 여부 확인 -->
      git branch --merged
      
      <!-- 병합하지 않은 브랜치 확인 -->
      git branch --no-merged
  • 브랜치를 합치는 방법은 merge와 rebase로 나뉨
    • rebase : 커밋의 트리 구조를 재 배열하는데 변경 결과가 병합과 유사함
    • base : 새로운 브랜치가 파생되는 커밋을 의미함
    • 리베이스가 실행되면 파생 브랜치의 커밋들은 기준 브랜치의 마지막 커밋으로 재정렬 되며 커밋ID(해시)가 변경됨
    • 리베이스 후 HEAD 포인터를 옮기기 위해 Fast-Forward 병합을 진행하고 필요없는 브랜치를 삭제하면 선형 구조로 브랜치가 완성됨
    • 충돌 발생 시 충돌 수정 후 'git rebase --continue' 로 계속 진행함
    • <!-- 3개의 커밋을 하나로 묶기 -->
      git rebase -i HEAD~3
    • 리베이스는 커밋 위치와 해시값을 변경하기 때문에 저장소를 외부에 공개한 후부터 사용하지 않는 것이 원칙임

'공부내용정리 > Git' 카테고리의 다른 글

배포와 태그(tag)  (0) 2021.12.28
복귀(reset, revert)  (0) 2021.12.28
스태시(stash)  (0) 2021.12.27
브랜치(branch, checkout)  (0) 2021.12.26
서버 저장소(GitHub, remote, push, clone, pull, fetch, merge)  (0) 2021.12.26
Comments