[git] (실수로) 삭제된 commit 복구하기

2017. 7. 27. 11:48IT개발/SVN & Git

반응형

- 서론 -

작업을 하다가 실수로 commit한 소스가 사라지는 상황을 맞았다. 

Oh my god! 아... git에서 우째 복구하지... 알아보니 요것이 있었군!

 

- 결론 -

git reflog
git reset --hard commit_id

위 두 명령어만으로 로컬에 커밋한 소스를 복구하였다.


- 본론 -

1. sourceTree 에서 터미널연다.

2. 터미널에서 git reflog 실행한다.

    단, 이때 로그 상에 hexadecimal 문자인 다음과 같은 문자로 보일 시,

<EB><A1><9C><EA><B7><B8><EC><9D><B8><EC><B2><98><EB><A6><AC> <EC><99><84><EB><A3><8C>(<EA><B6><8C><ED><95><9C> <EC><A0><81><EC><9A><A9><EC><99><84><EB><A3><8C>) <EB><A9><94><EC><9D><B8><ED><8E><98><EC><9D><B4><EC><A7><80> <EC><99><84><EB><A3><8C>


이것은 https://www.percederberg.net/tools/text_converter.html 가서 Hexadecimal-> Plain Text로 변환하면 내용을 알 수 있음


3. 복구하고픈 commit id를 복사하여 아래의 명령어를 실행한다.(제 경우는 commit id가 ccbd337 이다)

4. 터미널에서 git reset --hard ccbd337 하면, 소스가 복구된다.

5. 혹시나 모르니 안전빵으로 local branch를 생성하여 commit을 한다.

  또는 곧바로 원하는 branch에 push 한다. 끝!


- 참고한 stackoverflow 사이트 내용 - 

8down voteaccepted

To get back to that commit you can use the reflog to look up it's ref.

Reference logs, or "reflogs", record when the tips of branches and other references were updated in the local repository.

Run this command:

git reflog

Scan the first few entries, and find the commit that was lost. Keep track of the identifier to that commit (you can use either the 1st or 2nd columns). Let's call the identifier "ID".

If you have not made any extra work since you did the reset --hard you can do:

git reset --hard ID
git push -f origin master

If you have made other work since the reset, you could cherry-pick if back onto your branch like this:

git cherry-pick ID
git push origin master




반응형