Git을 사용하다 보면 여러 가지 이유로 git pull 명령어가 예상대로 작동하지 않는 경우가 있다. 네트워크 문제, 충돌(conflict) 발생, 로컬 변경 사항 등 다양한 원인으로 인해 Git 작업 흐름에 지장을 받을 수 있다. 이러한 상황에서 강제로 git pull을 실행하여 원격 저장소(repository)의 내용을 강제로 동기화하는 방법은 크게 세 단계로 나누어 볼 수 있다.
1. git fetch로 받을 목록을 repository에서 업데이트
git fetch -all
git fetch --all 명령어는 모든 원격 저장소와 브랜치의 최신 변경 사항을 로컬 저장소로 가져오지만, 실제 작업 디렉토리의 파일은 변경하지 않는다. 이 단계는 로컬 저장소의 정보를 최신 상태로 업데이트하며, 실제 파일은 변경되지 않기 때문에 작업 중인 내용에 영향을 주지 않는다.
2. git reset으로 HEAD를 최신으로 가리킴
git reset --hard origin/main
이 명령어는 로컬 저장소의 HEAD를 원격 저장소의 특정 브랜치(예시에서는 main)의 최신 커밋으로 재설정한다.
--hard 옵션은 작업 디렉토리의 파일을 강제로 원격 저장소의 상태와 일치시키므로, 로컬에서 작업 중이던 변경 사항들은 모두 사라지게 된다.
3. git pull로 확인
마지막 단계에서 git pull 명령어를 실행하여, 실제로 로컬 저장소가 원격 저장소와 동기화되었는지 확인한다. 이전 단계에서 이미 원격 저장소의 내용으로 로컬 저장소를 강제 업데이트했기 때문에, 이 단계에서는 특별한 변경 사항이 없어야 정상이다. git pull은 git fetch와 git merge 명령어의 기능을 합친 것으로, 원격 저장소의 변경 사항을 가져오고 현재 브랜치에 병합한다.
주의사항
git reset --hard 명령어는 로컬에 있는 변경 사항들을 모두 삭제한다. 중요한 코드가 있다면 이 명령어를 사용하기 전에 반드시 백업해두는 것이 좋다.
'DevOps > Git' 카테고리의 다른 글
[Git] .gitignore *yaml 적용 안됨. 해결책 (0) | 2024.06.12 |
---|---|
[Git] git add . 반영 안됨. (0) | 2024.04.26 |
가장 최근 Git 커밋 메시지 변경 (0) | 2024.02.10 |
[error] Your local changes to the following files would be overwritten by merge: (0) | 2023.05.25 |
댓글