IT공부

$ git pull fatal: Not possible to fast-forward, aborting. 해결방법

지식루프 2025. 3. 2. 18:34
728x90
반응형
$ git pull
fatal: Not possible to fast-forward, aborting.

 

 

위 에러 메시지는 Git에서 git pull 명령어를 실행했을 때 발생하는 것으로, 현재 브랜치와 원격 브랜치 간의 변경 사항을 자동으로 빠르게 병합(fast-forward)할 수 없다는 뜻입니다. 이 문제는 주로 로컬 브랜치와 원격 브랜치가 서로 다른 커밋을 가지고 있어서 충돌이 발생하거나 병합이 필요한 상황에서 나타납니다. 아래 단계별로 해결 방법을 설명하겠습니다.



1. 상황 파악하기


먼저, 로컬과 원격 브랜치의 상태를 확인해야 합니다.


bash

WrapCopy

git fetch origin git log HEAD..origin/브랜치명

  • git fetch는 원격 저장소의 최신 정보를 가져오지만 로컬 브랜치를 변경하지 않습니다.
  • HEAD..origin/브랜치명은 로컬 브랜치에 없는 원격 브랜치의 커밋을 보여줍니다. (예: origin/main)

2. 해결 방법 선택


이 상황을 해결하는 주요 방법은 두 가지입니다: 리베이스(Rebase) 또는 병합(Merge).


옵션 1: 병합(Merge)으로 해결


원격 브랜치의 변경 사항을 로컬 브랜치에 병합합니다.

 

git pull --no-rebase

  • 이 명령은 원격 브랜치의 변경 사항을 가져와 로컬 브랜치에 병합 커밋을 생성합니다.
  • 충돌이 발생하면 Git이 충돌 파일을 표시하니, 수동으로 수정 후 다음을 실행하세요:

    git add <수정된 파일> git commit
    git push

옵션 2: 리베이스(Rebase)로 해결


로컬 커밋을 원격 브랜치 위에 재정렬하여 깨끗한 히스토리를 유지합니다.

 

git pull --rebase

  • 충돌이 발생하면 해결 후 다음을 실행:
    bash

    WrapCopy

    git add <수정된 파일> git rebase --continue git push
  • 리베이스는 히스토리를 선형으로 유지하지만, 이미 원격에 푸시된 커밋이 있다면 주의하세요.

옵션 3: 강제로 덮어쓰기 (주의 필요)


로컬 변경 사항을 무시하고 원격 브랜치로 강제로 맞추고 싶다면:



git fetch origin git reset --hard origin/브랜치명

  • 경고: 이 방법은 로컬의 커밋된 변경 사항을 잃을 수 있으니, 중요한 작업이 있다면 먼저 백업하세요.

3. 충돌 예방 팁


  • 자주 git pull을 실행하여 로컬 브랜치를 최신 상태로 유지하세요.
  • 팀 작업 시 커뮤니케이션을 통해 같은 파일을 동시에 수정하지 않도록 조정하세요.
728x90
반응형