본문 바로가기
카테고리 없음

[git] Git Pull 시 rebase와 merge의 차이

by Enhydra lutris 2024. 12. 3.

merge

방식:

  • 기본 동작. 원격 브랜치의 커밋을 현재 로컬 브랜치에 병합
  • 병합 커밋(Merge Commit)이 생성
  • 병합의 히스토리를 명확하게 유지

특징:

  • 원래의 커밋 히스토리를 그대로 유지
  • 히스토리가 복잡하게 보일 수 있음

사용 예시:

git pull origin <branch-name> --merge
#기본동작이므로 옵션을 안달아도 된다.
git pull origin <branch-name>

 

적합한 상황:

  • 히스토리의 병합 작업을 명확히 기록하고 싶을 때
  • 협업 중 병합 커밋 기록을 통해 컨텍스트를 유지하고자 할 때
  • 여러 사람이 동시에 작업하여 충돌 가능성이 높은 경우

깃로그

상황

  1. main 브랜치에서 로컬에서 작업을 진행하여 커밋 A, B 생성.
  2. 원격 main 브랜치에서 커밋 C가 추가됨.
  3. git pull --merge 실행.


 

rebase

방식:

  • 원격 브랜치의 변경 사항을 현재 브랜치의 기준점으로 가져와, 로컬 브랜치의 변경 사항을 재배치
  • 새로운 커밋 해시가 생성

특징:

  • 히스토리가 직선형으로 정리되어 깔끔
  • 원래의 커밋 해시가 변경되므로, 협업 중에는 주의가 필요.

사용 예시:

git pull origin <branch-name> --rebase

적합한 상황:

  • 히스토리를 직선형으로 유지하고 싶을 때.
  • 협업보다는 개인 작업 브랜치에서 사용하거나, 변경 사항이 단순할 때.
  • 병합 커밋 없이 깔끔한 히스토리가 필요할 때.

깃로그

상황:

  1. 로컬 main 브랜치에서 커밋 A, B 생성.
  2. 원격 main 브랜치에서 커밋 C가 추가됨.
  3. git pull --rebase 실행.


비교 표

특징 merge rebase
히스토리 구조 병합 커밋 포함, 분기점이 생김 직선형, 커밋이 재배치됨
병합 커밋 생성 여부 생성됨 생성되지 않음
원본 커밋 유지 원본 커밋 그대로 유지 원본 커밋 해시 변경
충돌 처리 방식 충돌 발생 병합 커밋 내에서 해결 충돌 발생 커밋마다 해결
적합한 상황 협업 기록을 명확히 남기고 싶을 히스토리를 깔끔히 유지하고 싶을
주의사항 히스토리가 복잡해질 있음 협업 사용 , 재배치로 충돌 가능성 있음

 


명령어와 옵션 정리

git pull --merge

옵션 설명 예시
--commit 병합 자동으로 병합 커밋 생성 (기본 동작) git pull --merge --commit
--no-commit 병합 커밋을 생성하지 않고 병합된 상태로만 유지 git pull --merge --no-commit
--squash 모든 변경 사항을 하나의 커밋으로 압축 git pull --merge --squash
--edit 병합 커밋 메시지를 편집하도록 설정 git pull --merge --edit

git pull --rebase

옵션 설명 예시
--interactive 인터랙티브 모드에서 재배치 커밋 조정 git pull --rebase --interactive
--autostash Rebase 전에 로컬 변경 사항을 임시로 저장하고, Rebase 완료 복원 git pull --rebase --autostash
--preserve 커밋 메타데이터 (e.g., 날짜, 작성자) 보존 git pull --rebase --preserve
--no-autostash 기본값. Rebase 임시 저장 없이 진행 git pull --rebase --no-autostash

 

결론

  • merge: 협업 시 커밋 히스토리를 명확히 남기고 싶을 때 사용. 기본 동작이며 안전.
  • rebase: 히스토리를 깔끔하게 유지하고 싶을 때 사용. 단, 협업 시 충돌 가능성 주의

댓글