Git 리베이스 브랜치: 단계별로 안전하게 리베이스하는 방법
리베이스에는 하나의 명령이 필요합니다. 안전하게 수행하려면 이전 팁을 저장하고, 각 충돌을 처리하고, 결과를 비교하고, 팀원을 덮어쓰지 않고 푸시하는 등 몇 가지 작업이 더 필요합니다. 전체 순서는 다음과 같습니다.
작성자: Kodmora
GitTree 뒤에 있는 소프트웨어 하우스
- 리베이스
- 브랜치
- 병합 충돌
- 리모트 및 푸시
이 페이지에서
브랜치를 리베이스하려면 가져와서 전환하고 새 베이스인 `git fetch origin`, `git switch topic`, `git rebase origin/main`에서 재생합니다. Git은 브랜치의 자체 커밋을 따로 설정하고 해당 브랜치를 origin/main의 끝으로 이동한 다음 한 번에 하나씩 커밋을 다시 적용합니다. 기록은 병합 커밋 없이 직선으로 유지됩니다. 재생된 모든 커밋은 새로운 해시를 얻으므로 이미 푸시한 브랜치에는 나중에 git push --force-with-lease가 필요합니다.
git rebase는 브랜치에 어떤 역할을 합니까?
topic에 자체 커밋이 2개 있고 main이 브랜치가 시작된 이후 3개를 늘렸다고 가정해 보겠습니다. main를 브랜치에 병합하지 않고 시작점 업데이트를 리베이스합니다.
# before
A---B---C---D---E origin/main
\
F---G topic
# after git rebase origin/main
A---B---C---D---E origin/main
\
F'---G' topicF' 및 G'는 F 및 G과 동일한 변경 사항 및 메시지를 보유하지만 상위 항목이 변경되었기 때문에 새 해시가 포함된 새 커밋입니다. 동일한 시작점에서 병합하면 두 줄을 모두 유지하고 두 개의 상위 항목에 하나의 커밋을 추가합니다. 병합 대 리베이스 강의에서는 두 가지를 하나의 그래프에 표시합니다.
단계별로 안전하게 브랜치를 리베이스하려면 어떻게 해야 합니까?
먼저 검사하고 이전 팁을 유지한 후 재생한 다음 테스트하세요. 처음 세 명령은 아무것도 다시 작성하지 않습니다.
# 1. update origin/main, your files stay as they are
git fetch origin
# 2. list the commits Git will replay
git log --oneline origin/main..topic
# 3. keep a name on the old tip
git branch topic-backup topic
# 4. replay
git switch topic
git rebase origin/main목록에 인식할 수 없는 커밋이 있으면 2단계에서 중지하세요. 이는 분기가 생각했던 곳에서 시작되지 않았음을 의미하기 때문입니다. 리베이스가 종료되면 git status를 실행하여 완료되었는지 확인한 다음 테스트를 실행하세요. 충돌이 없는 리베이스는 여전히 동작을 중단시킬 수 있습니다.
매번 기지의 이름을 지정하십시오. 베어 git rebase는 분기의 업스트림을 사용하는데, 이는 종종 main가 아닌 origin/topic입니다. 다른 기능 브랜치에서 시작된 브랜치를 이동하려면 이전 베이스의 이름도 git rebase --onto main old-base topic로 지정하세요. 미출판 작업 리베이스 강의에서는 이를 실제 그래프로 연습합니다.
리베이스 중에 충돌을 해결하려면 어떻게 해야 하나요?
Git은 커밋을 한 번에 하나씩 적용하므로 같은 줄에서도 두 번 이상 중지할 수 있습니다. 이후 커밋은 아직 적용되지 않았으므로 Git이 중지된 커밋만 수정합니다.
# edit the file and remove the conflict markers, then
git add path/to/file
git rebase --continue| 명령 | 기능 | 다음과 같은 경우에 사용하세요. |
|---|---|---|
git rebase --continue | 준비된 결과를 기록하고 다음 커밋으로 이동합니다. | 갈등이 해결되고 단계화됩니다. |
git rebase --skip | 재생 중인 커밋을 삭제합니다. | 변경사항이 이미 업스트림에 있음을 확인했습니다. |
git rebase --abort | 브랜치를 중지하고 원래 위치로 되돌립니다. | 기지나 계통을 잘못 선택했거나 충돌에 대해 더 생각해 볼 필요가 있습니다. |
동일한 충돌을 자주 반복하는 경우 git config rerere.enabled true은(는) 해결 방법을 기록하고 재사용합니다. 어제의 답변이 오늘의 코드에서는 틀릴 수 있으므로 재사용된 결과를 각각 확인하세요. 계속, 건너뛰기 및 중단 강의에서는 각 사례를 살펴보고 병합 충돌 해결 방법에서는 마커 읽기를 다룹니다.
푸시하기 전에 리베이스를 어떻게 확인하나요?
다른 사람이 보기 전에 이전 시리즈와 새 시리즈를 비교하세요.
# old and new commits, matched pair by pair
git range-diff origin/main topic-backup topic
# everything the branch adds to main, as one diff
git diff origin/main...topic
# the shape of the history
git log --graph --oneline --decorate origin/main topicgit range-diff는 충돌 해결로 인해 패치가 변경되거나 커밋이 누락된 경우를 표시합니다. 컴파일되는 코드는 중단된 테스트나 변경된 조건을 숨길 수 있으며, 여기서 이를 발견할 수 있습니다.
리베이스를 어떻게 취소하나요?
실행되는 동안 git rebase --abort을(를) 사용하세요. 완료되면 분기를 다시 이전 팁으로 옮깁니다. --hard는 커밋되지 않은 변경 사항을 삭제하므로 먼저 git status을 확인하세요.
git reset --hard topic-backup
# no backup? find the old tip in the reflog
git reflog show topic
git reset --hard <old-tip-hash>재설정, 리베이스 또는 커밋 실행 취소 가이드에서 리플로그에 대해 더 자세히 다루고 있습니다.
리베이스 브랜치를 어떻게 푸시하나요?
원격 브랜치가 여전히 이전 커밋을 보유하고 있고 Git이 빨리 감기가 아닌 업데이트를 확인하기 때문에 일반적인 푸시는 거부됩니다. 교체하려는 항목을 확인한 후 임대를 푸시합니다.
git fetch origin
git log --oneline topic..origin/topic
git push --force-with-lease origin topicgit log에는 이전 커밋만 나열되어야 합니다. 그 외의 일은 팀원의 일이므로 먼저 멈추고 가져오세요. --force-with-lease는 마지막 가져오기가 본 위치에 여전히 원격 분기가 있고 일반 --force에는 그러한 확인이 없는 경우에만 원격 분기를 대체합니다. 백그라운드 가져오기는 해당 값을 업데이트하므로 스크립트는 예상되는 커밋의 이름을 git push --force-with-lease=topic:<expected-hash> origin topic로 지정할 수 있습니다.
이 브랜치를 리베이스하거나 병합해야 합니까?
| 상황 | 사용 | 왜? |
|---|---|---|
| 나만의 단기 주제 브랜치 | 리베이스 | 커밋별로 커밋을 읽는 직접적인 기록입니다. |
| 다른 사람이 가져오거나 구축한 브랜치 | 병합 | 아무것도 다시 작성하지 않으므로 누구도 작업을 고칠 필요가 없습니다. |
| 수명이 긴 통합 브랜치 | 병합 | 두 가지 개발 라인 모두에 대한 기록을 유지합니다. |
| 검토 중인 브랜치 | 리뷰어가 동의하면 리베이스 | 주석은 곧 변경될 커밋을 가리킬 수 있습니다. |
GitTree에서 브랜치를 리베이스하는 방법
새로운 기지를 선택하세요
브랜치를 확인하고 작업을 추가할 브랜치(예:
develop)를 마우스 오른쪽 버튼으로 클릭한 다음 Rebase … onto …을 선택합니다.옵션을 확인하세요
확인에는 각 커밋이 새 ID로 재생되고 이전 분기가 유지된다는 내용이 나와 있습니다. 로컬 변경 사항을 숨겨서 다시 넣을 수도 있습니다.
각 단계를 따르세요.
배너에는 Rebasing … onto …, step … of …이 표시됩니다. 단계가 충돌하는 경우 Resolve는 파일을 열고 Continue는 계속됩니다. Skip은 해당 커밋을 삭제하고 Abort…는 브랜치를 원래대로 되돌립니다.
변경된 내용을 검토하세요.
What Changed… (
Alt+D)은git range-diff과 같이 리베이스 전후의 커밋을 쌍별로 비교합니다.푸시 또는 실행 취소
이미 원격에 있는 분기에 대해 Force Push (With Lease)…를 사용합니다. Undo는 브랜치를 원래 위치로 되돌리고 이전 커밋은
refs/ogt/trash아래에 유지됩니다.

브랜치 리베이스 가이드에는 모든 옵션이 있으며 임대를 통한 강제 푸시에서는 푸시에 대해 다룹니다. 도중에 스쿼시, 단어 변경 또는 순서 변경을 수행하려면 GUI의 대화형 리베이스를 읽어보세요.

자주 묻는 질문
git rebase는 변경 사항을 잃습니까?
그 자체로는 아닙니다. Git은 변경 사항을 새로운 커밋으로 재생합니다. 커밋을 삭제하거나, git rebase --skip을 실행하거나, 잘못된 방식으로 충돌을 해결하면 작업이 사라집니다. Git은 변경 사항이 이미 업스트림에 있는 커밋도 제외합니다.
git rebase --abort와 reflog의 차이점은 무엇입니까?
git rebase --abort는 리베이스가 진행되는 동안에만 작동합니다. 완료된 후에는 리프로그에 해당 분기의 이전 팁이 보관되므로 그 중 하나로 재설정할 수 있습니다.
병합 커밋이 포함된 분기를 리베이스할 수 있나요?
예. git rebase --rebase-merges origin/main이(가) 이를 유지합니다. 해당 옵션이 없으면 Git은 브랜치를 평면화하고 병합 커밋을 종료합니다.
리베이스 후 git push가 실패하는 이유는 무엇입니까?
원격 브랜치에는 다시 작성된 브랜치에 포함되지 않은 이전 커밋이 여전히 있습니다. 확인한 다음 git push --force-with-lease origin topic을(를) 사용하세요.
기본 또는 원본/기본을 리베이스해야 합니까?
git fetch origin 뒤에 origin/main을(를) 사용하세요. 이는 최신 게시 상태이므로 로컬 main을(를) 먼저 업데이트할 필요가 없습니다.
출처
다른 제품에 대한 주장은 2026년 11월 7일의 공식 페이지에서 확인되었습니다. 가격과 기능은 변경됩니다. 공급업체 페이지가 진실의 원천입니다.
