git rebase와 git merge의 차이점을 설명하고, 각각 어떤 상황에서 사용하는 것이 적절한지 설명해 주세요.

merge는 협업 시 충돌 해결이 필요한 경우 출동이 발생한 시점의 기록을 유지하기 때문에 기록을 보존한다.
반면 rebase는 히스토리가 선형으로 결합(정리) 되기 때문에 깔끔한 히스토리를 유지하기 좋지만, 협업 브랜치처럼 상황에 따른 히스토리 파악이 어렵다.
git fetch와 git pull의 차이점을 설명하고, 각각을 사용하는 것이 적절한 상황을 설명해 주세요.
저장소의 변경 사항을 가져와 로컬 브랜치에 병합하여 작업 디렉토리에 적용한다.
git pull은 git fetch + git merge의 간략화된 명령어이다
그럼 git fetch는 무엇일까?
차이점은 merge(병합) 처리 여부이다.
pull은 원격 레포지토리로부터 최신 커밋을 내려받아서 현재 로컬 브랜치와 자동 병합을 한다.
반면 fetch는 원격 레포지토리에서 최신 커밋을 이름없는 임시 브렌치로 내려받는다 (병합을 진행x)
pull : 원격 레포지토리가 로컬 레포지토리에 비해 더 최신 커밋이 존재할 때만 내려받도록 한다.
fetch : 원격 레포지토리와 로컬 레포지토리의 변경 사항이 다를 때, 이를 비교 및 대조하는 확인 작업이 필요할 때 사용한다.