Git repository의 첫 commit 되돌리기

Donghoon Song
Nov 3 · 4 min read
Photo by Abigail Keenan on Unsplash

컴퓨터를 포맷하고 나서 새로 push를 하려고 했는데 실수로 git config 지정을 안해줬습니다. 그래서 제 repository에는 익명의 사용자로부터의 commit이 반영되었습니다. 저는 이 commit을 되돌리고 git config를 설정하여 제 계정으로 된 commit을 다시 남기고 싶었습니다. 이렇게 repository에 단 하나의 commit만 있을 때 이를 어떻게 되돌릴 수 잇을까요?

add, commit, push를 되돌리는 방법은 인터넷에 많이 나와 있습니다. 하지만 제 경우에는 적용이 되지 않았습니다.

git reset HEAD^는 가장 마지막 commit을 취소하는 명령어입니다.

방법을 찾지 못하다가 오류 내용으로 검색을 하자 방법을 찾을 수 있었습니다.

제가 참고했던 스택오버플로우의 답변은 이렇습니다.

최초 commit을 지운다기보다는 그 브랜치를 지우면 됩니다. 대신 git branch -D를 사용하면 안됩니다. safety check에 걸리기 때문입니다.

여기서 update-ref는 무엇일까요?

공식문서를 살펴보면,

Git에서 어떤 commit이 있으면 그 commit 이전의 history를 조회할 수 있지만, 그 commit을 기억해야 한다. commit을 가리키는 것은 SHA-1 해시값이기 때문에 그것보다는 사용하기 쉬운 이름으로 된 포인터가 있으면 좋을 것이고, 외우기 쉬운 이름으로 된 파일에 SHA-1 값을 저장한다. Git에서는 이런 것을 “References” 또는 “Refs”라고 하고, 이것이 바로 Git의 Branch가 하는 일이다.

Refs 파일을 직접 고치는 것은 별로 좋지않아 보이기 때문에 git update-ref 명령어를 제공한다고 합니다.

즉 첫번째 명령어는 HEAD를 가리키고 있는 branch를 지우는 역할을 합니다.

두번째 명령어의 의미는 다음 그림을 보시면 이해하실 수 있습니다.

  • — cached 옵션을 붙인 이유는 원격 저장소에선 지워야 하지만 저는 다시 commit을 할 것이었기 때문에 로컬 저장소에선 제 파일을 남겨둬야 하기 때문입니다.

두 명령어를 실행한 후에는 push할 때 -f를 붙여서 진행하시면 되겠죠? (로컬과 원격이 싱크가 맞지 않으므로)

긴 글 읽어주셔서 감사합니다.

git rm에 대한 설명

Donghoon Song

Written by

사진찍는 웹개발자

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade