Git School · FluxGit

Git 브랜치가 갈라졌을 때: merge 또는 rebase 선택

FluxGit ·

각 블록은 다른 경우이며 하나의 실행 스크립트가 아닙니다. 저장소에 맞는 경우를 선택하고 브랜치 이름, 경로와 VERIFIED_COMMIT을 바꾸세요. 중단 명령은 해당 작업이 진행 중일 때만 사용하며 두 대안을 모두 실행하지 마세요.

핵심 답변

브랜치가 diverged 상태라는 것은 로컬 끝과 upstream에 서로 없는 커밋이 있다는 뜻입니다. fetch 후 양쪽을 검토하고 통합 방법을 선택하세요. merge는 이력을 유지하고 rebase는 upstream 위에 로컬 커밋을 재적용해 ID를 바꿉니다. 경고는 그래프 설명이며 파일 손실 증거가 아닙니다.

예시와 전제 조건

예시는 origin/main을 추적하는 main에 로컬 커밋 두 개, 원격 커밋 한 개가 있습니다. 실제 이름과 upstream을 확인하세요. fetch는 원격 추적 참조를 갱신하지만 현재 브랜치에 자동 통합하지 않습니다. 다른 remote 이름이나 upstream 없는 브랜치에는 이름 조정이 필요합니다.

변경 전에 상태 확인

status와 branch -vv를 읽은 다음 fetch origin합니다. HEAD...origin/main의 좌우 수는 각 쪽에만 있는 커밋 수입니다. 그래프와 패치도 읽으세요. 2대1이라는 수만으로 같은 함수를 바꿨는지 알 수 없습니다. 오래된 원격 참조나 수만으로 판단하지 않습니다.

git status --short
git branch -vv
git fetch origin
git rev-list --left-right --count HEAD...origin/main
git log --oneline --graph --decorate HEAD origin/main

참조나 별도 체크아웃 보존

통합 전에 로컬 끝에 rescue/before-sync를 만들고 미커밋 작업은 따로 저장합니다. 브랜치는 커밋 이력을 유지하고 stash는 추적·미추적·무시 파일에 따라 범위가 다릅니다. 저장 결과를 확인하세요. 무관한 로컬 편집을 안고 통합하면 충돌과 복구를 이해하기 어렵습니다.

git branch rescue/before-sync HEAD

첫 번째 절차

이력을 보존해야 한다면, 특히 로컬 커밋을 공유했다면 merge를 선택합니다. merge origin/main은 가져온 upstream과 현재 브랜치를 합치고 분기 상태에서는 보통 두 부모를 기록합니다. 공개 전에 diff와 프로젝트 검사를 확인하세요. 병합 완료만으로 결합 코드가 올바르지는 않습니다.

git merge origin/main

다른 결과를 의도적으로 선택

팀이 재작성을 허용한 로컬 커밋에는 rebase를 선택할 수 있습니다. rebase origin/main은 가져온 끝 위에 작업을 재적용하고 보통 ID가 달라집니다. 협업자가 기존 ID에 의존할 수 있습니다. 선형 그래프는 공유 브랜치 재작성이나 보호 규칙 우회 권한이 아닙니다.

git rebase origin/main

제한과 예외

merge 충돌에서는 status를 읽고 해결·스테이지한 뒤 완료합니다. 조건에 맞으면 merge --abort로 중단합니다. rebase에서는 현재 충돌을 해결하고 rebase --continue하며 여러 번 멈출 수 있습니다. rebase --abort는 활성 rebase를 중단합니다. 두 절차를 섞지 마세요.

git status
git merge --abort
git rebase --abort

충돌과 정리

reset --hard origin/main은 일반적인 해결책이 아닙니다. 브랜치의 별도 로컬 이력을 제거하고 추적 파일을 덮을 수 있습니다. 이는 작업을 버리는 별도 결정입니다. 여기서는 원하는 이력을 합칩니다. 버릴 경우 먼저 커밋을 검토하고 필요한 복사를 보존하는 별도 절차를 사용합니다.

결과 확인

최종 그래프, 상태, origin/main과 차이 및 프로젝트 검사를 확인합니다. fetch 뒤 원격이 진행하면 일반 push가 거부될 수 있습니다. 다시 가져와 새 상태를 검토하고 자동으로 force push하지 마세요. 통합의 영향을 검토할 때까지 구조 참조를 유지합니다.

git status --short
git log -8 --oneline --graph --decorate
git diff origin/main HEAD

자주 묻는 질문

pull이 전략을 요구하는 이유는 fetch와 통합 선택이 결합되기 때문입니다. merge와 rebase 모두 충돌할 수 있습니다. rebase가 항상 낫지는 않습니다. 공유 여부와 팀의 이력 정책이 보편적인 선호보다 중요합니다.

FluxGit에서 작업 검토

FluxGit의 시각적 이력과 변경 보기로 작업과 관련 커밋을 검토하세요. 이 예시의 브랜치, 공유 여부와 로컬 파일 검사를 유지합니다. 다운로드 페이지에서 현재 제공되는 빌드와 플랫폼을 확인할 수 있습니다.

Git 공식 문서

관련 절차

FluxGit 다운로드