1. Problem
Git 을 사용하다 보면 현재 branch 의 commit 내용이 아닌 다른 branch commit 의 이력을 모두 받아오고 싶은 경우가 있습니다. master 의 내용으로 덮어 쓰거나, 여러 작업을 하다 보니 현재 Branch 가 origin 과 달라서 merge 할 수 없고 충돌나는 케이스 등 여러가지 경우가 있을 것입니다. 이럴 때에는, 강제(force)로 pull 해줘야 합니다. 어떻게 해야 원하는 commit 으로 덮어쓰기(overwrite)를 할 수 있을까요?
2. Solution
아래의 명령어를 수행하기 전에 먼저 $ git fetch
을 수행해서 Origin 의 데이터를 가져오는 것이 좋습니다. 명령어를 가져온 후에는 git reset --hard 'commit_hash'
을 통하여 손쉽게 덮어쓰기를 할 수 있습니다.
# 사용예시
$ git reset --hard 'commit_hash'
# example
$ git reset --hard abcdefg
# origin/master 로 강제 Pull
$ git reset --hard origin/master
현재 저장되지 않은 데이터는 git stash
를 통해 잠시 보관해두고, 위의 명령어를 사용하여 강제로 pull 하면 origin 의 commit 을 덮어쓰기하여 정상적으로 pull 받을 수 있습니다.
reference
- https://stackoverflow.com/questions/1125968/how-do-i-force-git-pull-to-overwrite-local-files