코드/Git

[GIT] remote it cannot be fast-forwarded git pull 시 발생하는 오류

Yeah-Panda 2025. 1. 6. 09:38

이 오류는 git pull이 기본적으로 fast-forward 병합을 시도하기 때문에 나타납니다.

 

주요 원인

1. 로컬 변경 사항

 로컬 브랜치에 원격 브랜치와 충돌하는 변경 사항이 이미 커밋되어 있을 때.

 

2. 병합 불가능한 변경 사항

원격 브랜치가 로컬 브랜치에서 병합되지 않은 새로운 커밋을 포함하고 있어, fast-forward로 병합이 불가능할 때.

 

3. 브랜치 분기

 로컬 브랜치와 원격 브랜치가 서로 다른 히스토리를 가지고 있을 때. 즉, 두 브랜치가 동일한 조상(commit)을 공유하지 않는 경우.

 

 

해결 방법

 

1. 로컬 변경 사항 확인

먼저 로컬 브랜치가 원격 브랜치와 충돌할 가능성이 있는 변경 사항을 확인합니다.

 

2. 수동 병합 시도

git pull이 자동 병합에 실패한 경우, 수동 병합을 진행합니다.

git reset --hard origin/<브랜치명>

1. rebase를 사용하여 병합:

git pull --rebase

 

2. 병합 실패 시 충돌 해결:

충돌이 발생하면 파일을 수동으로 수정한 뒤, 변경 사항을 추가:

git add <파일명>
git rebase --continue

 

3. 강제 병합 (충돌 무시)

원격 브랜치로 덮어쓰려면 강제 병합을 사용합니다. 이 방법은 로컬 변경 사항을 덮어쓸 위험이 있으므로 주의하세요.

git reset --hard origin/<브랜치명>

 

4. 강제로 로컬 변경 사항을 푸시

만약 로컬 커밋을 원격에 우선적으로 적용하려면 강제 푸시를 사용합니다:

git push origin <브랜치명> --force

 

 

git pull 대신 Fetch와 병합 사용

git pull을 사용하면 자동 병합을 시도하므로, 더 많은 제어를 위해 fetch와 병합을 수동으로 수행할 수 있습니다.

1. 원격 변경 사항 가져오기:

git fetch
# 이후에
git merge origin/<브랜치명>

 

결론

fast-forward 병합이 불가능한 상황에서는 rebasemerge를 통해 충돌을 해결합니다.

강제 병합이나 푸시는 마지막 수단으로만 사용하세요.

변경 사항과 충돌을 파악한 뒤 적절한 방식으로 문제를 해결하세요. 

'코드 > Git' 카테고리의 다른 글

[Git] ahead, behind 의 정의  (0) 2024.12.26
[Git] 브랜치 강제 머지  (0) 2021.12.10
[Git] 태그 일괄 삭제  (0) 2020.12.11
[Git] git cache 제거  (0) 2020.06.06
[GIT] 특정태그가 remote 와 동기화 되지 않을 경우  (0) 2019.06.24