깃(git) - 프로젝트 진행 중 저장소로부터 최신 소스 받아오기
git으로 관리중인 프로젝트에서 소스 코드를 막 변경하며 개발하다가, 저장소의 자신이 속한 branch의 소스가 다른 사람으로 인해 업데이트 되면 받아야 할 때가 생깁니다.
그냥 git pull 하면 충돌의 여지가 아주 많기 때문에 진행이 잘 되지 않습니다. 간단한 수정 또는 테스트용으로 살짝만 바꿨는데도 git pull이 잘 안 된다면, 아래와 같은 방법이 있습니다.
1. 기존 변경 사항을 무시
git reset --hard HEAD
git pull
reset --hard HEAD 는 가장 최근 커밋으로 소스 코드를 돌려버립니다.
이제 원격 저장소의 가장 최근 커밋과 같은 소스가 됐으니, 충돌이 일어날 리가 없죠.
이 상태에서 git pull을 하는 원리입니다.
아니면,
git fetch --all
git reset --hard HEAD
먼저 최신 소스를 받아온 후 가장 최근 커밋으로 돌리는 방법이 있습니다.
2. 기존 변경 사항 저장
git checkout master
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/master
먼저 master 브랜치로 가줍니다. 그리고, master에서 새로운 브랜치를 쳐줍니다.
그 다음 아직 master 브랜치에 있을텐데, 여기서 fetch --all을 통해 모든 최신 소스를 받아옵니다.
마지막으로 reset을 통해 강제로 최신 소스를 적용시키는 원리입니다.
fetch 하기 전까지의 모든 커밋들은 new-branch-to-save-current-commits 브랜치에 남아있습니다. 이를 위해선 master에 가서 새로운 브랜치를 치기 전에 이전 변경 사항들은 모두 commit을 해놔야겠죠.
출처: https://stackoverflow.com/questions/1125968/how-do-i-force-git-pull-to-overwrite-local-files