Git Rebase
마지막 업데이트
git rebase는 브랜치의 커밋을 옮겨 다른 브랜치 위에 재적용함으로써, 머지 커밋 대신 곧고 선형적인 히스토리를 만듭니다. 인터랙티브 리베이스(-i)는 한 걸음 더 나아가 커밋을 스쿼시하거나 재정렬하고, 편집하거나 삭제할 수 있게 해줍니다. 리베이스는 커밋을 다시 쓰기 때문에, 아직 공유하지 않은 작업에만 사용하세요.
이것들을 터미널 플레이그라운드에서 시도해 보세요. 브라우저 안의 진짜 셸이며, 설치할 것이 없습니다.
문법
| Command | What it does |
|---|---|
git rebase main | 커밋을 main 위에 재적용합니다 |
git rebase -i HEAD~3 | 최근 3개의 커밋을 인터랙티브하게 편집합니다 |
git rebase --onto main old new | 커밋 범위를 main 위로 옮깁니다 |
git rebase --continue | 충돌을 해결한 후 다시 진행합니다 |
git rebase --abort | 리베이스를 취소하고 브랜치를 복원합니다 |
git pull --rebase | 머지 대신 pull과 rebase를 수행합니다 |
인터랙티브 리베이스 키워드
-i가 여는 편집기에서 pick을 이들 중 하나로 바꾸세요.
| Keyword | What it does |
|---|---|
pick | 커밋을 그대로 유지합니다 |
reword | 커밋을 유지하고 메시지를 편집합니다 |
squash | 이전 커밋에 합치고 메시지를 병합합니다 |
fixup | 합치되 이 메시지는 버립니다 |
drop | 커밋을 완전히 제거합니다 |
git rebase 자주 묻는 질문
git rebase는 무엇을 하나요?
현재 브랜치의 커밋들을 가져와, 마치 그 브랜치의 최신 커밋에서 작업을 시작한 것처럼 다른 브랜치 위에 하나씩 재적용합니다. 그 결과 머지 커밋이 없는 선형 히스토리가 됩니다. 이 과정에서 커밋은 다시 쓰여집니다(새로운 해시를 받습니다).
인터랙티브 리베이스란 무엇인가요?
git rebase -i <base>는 <base> 이후의 커밋들을 나열하는 편집기를 열며, 여기서 커밋을 재정렬하거나 여러 개를 하나로 squash하거나 메시지를 reword하거나 커밋을 edit하거나 drop할 수 있습니다. 공유하기 전에 지저분한 커밋 시리즈를 정리하는 주요 도구입니다.리베이싱의 황금률은 무엇인가요?
다른 사람이 이미 작업의 기반으로 삼은 커밋, 일반적으로 공유 브랜치에 푸시된 모든 것은 절대 리베이스하지 마세요. 리베이스는 커밋을 다시 쓰기 때문에, 그렇게 하면 다른 모든 사람이 갈라진 히스토리를 조정해야 합니다. 로컬의 푸시되지 않은 커밋은 자유롭게 리베이스하고, 공개된 것에는 merge나 revert를 사용하세요.
충돌이 있는 리베이스를 어떻게 고치거나 취소하나요?
리베이스가 충돌에서 멈추면, 파일을 해결하고
git add한 다음 git rebase --continue를 실행하세요. 현재 커밋을 버리려면 git rebase --skip을, 완전히 취소하고 브랜치를 리베이스 시작 전 상태로 되돌리려면 git rebase --abort를 사용하세요.이것을 온라인에서 연습할 수 있나요?
네. 터미널 플레이그라운드를 열어 브라우저 안의 진짜 셸에서
git rebase를 실행하세요. 설치할 것이 없습니다. Coddy의 무료 인터랙티브 Git 강좌도 리베이싱을 단계별로 다룹니다.