안녕하세요 @realmankwon 입니다.
git reset과 git rebase는 Git의 다른 기능을 나타내는 두 개의 명령어입니다. 각각의 목적과 동작은 다음과 같습니다.
git reset: 이 명령어는 커밋을 이동하거나 브랜치를 변경하는 데 사용됩니다. 주로 이전 커밋으로 되돌리는 데 사용됩니다. git reset에는 세 가지 주요 옵션이 있습니다.
--soft: 이 옵션은 HEAD를 특정 커밋으로 이동시키면서 인덱스와 워킹 디렉토리를 변경하지 않습니다. 이전 커밋들의 변경 사항을 스테이징 영역에 남겨둡니다.
--mixed (기본 옵션): 이 옵션은 HEAD를 특정 커밋으로 이동시키면서 인덱스를 변경합니다. 워킹 디렉토리는 변경하지 않습니다. 이전 커밋들의 변경 사항을 언스테이징합니다.
--hard: 이 옵션은 HEAD를 특정 커밋으로 이동시키면서 인덱스와 워킹 디렉토리를 완전히 변경합니다. 이전 커밋들의 변경 사항을 모두 지워버립니다.
git rebase: 이 명령어는 현재 브랜치의 커밋을 다른 브랜치나 커밋에 적용하거나, 커밋들을 재정렬하는 데 사용됩니다. 주로 브랜치를 유지하면서 커밋을 정리하고 합치는 데 사용됩니다.
git rebase는 대상 브랜치에서 커밋을 가져와 현재 브랜치에 적용하는 작업을 수행합니다. 이 작업은 세 가지 단계로 이루어집니다.
기준점(commit base) 결정: 현재 브랜치와 대상 브랜치의 공통 조상을 찾습니다.
패치 적용: 대상 브랜치에서 현재 브랜치로 변경된 커밋을 패치로 가져와 적용합니다.
충돌 해결: 필요한 경우, 충돌이 발생하는 경우 충돌을 해결하고 커밋을 생성합니다.