가끔 로컬과 저장소의 파일이 다를 때 동기화를 위해서 git pull
명령어를 사용해도
git pull Already up to date.
라는 메세지만 뜬 후 코드가 가져 올 수 없을 때가 있다.
$git fetch --all
$git reset --hard origin/master
$git pull
위 명령어를 통해 이전 코드와 상관 없이 최신 커밋을 덮어 씌울 수 있습니다.
원격 저장소(github)에 있는 정보들을 가져오는 명령어
어떤 변화가 있는지 확인할 수 있습니다. 정보를 저장하는 것은 아니고, 정보를 확인하고 필요하면 병합(merge)할 수 있습니다. fetch를 사용해서 최신 커밋 정보를 가져오면 FETCH_HEAD라는 브랜치로 가져옵니다. 따라서, 커밋 정보를 보기 위해서는 해당 브랜치로 이동(checkout)해야합니다.
이렇게 최신 커밋 정보를 가져와서 정보를 저장하려면(합치려면) $git pull을 사용해도 되고, $git merge를 사용해도 됩니다.
HEAD의 포인터를 특정 위치로 옮기는 명령어
--hard
옵션을 추가해서 이전 커밋으로 돌아가면, 그 커밋 이후에 내용들은 삭제됩니다.
--mixed
옵션을 추가해서 커밋을 이동하면 변경 이력이 모두 삭제되지만 스테이지에 코드가 남아있습니다. 이 코드를 add 후 커밋하면 됩니다.
--soft
옵션을 추가하면 mixed 옵션과 같지만 이미 스테이징 되어있습니다. 이 말은, add 없이 바로 커밋하면 된다는 뜻입니다.
이 명령어는 commit history를 덮어 씌우는 commit history로 바꾸기 때문에 기록이 없어집니다. 이 경우 다른 사람과 협업하는 상황에서 문제를 일으킬 수 있는 여지가 있습니다. 지금 제 상황과 같이 코드에 대한 확신이 있는 경우나 혼자 사용하는 브랜치에만 사용하는 것이 좋습니다.