달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'Reset'에 해당되는 글 1건

  1. 2010.12.08 git commit 복구하기 3

git commit 복구하기

Tool/git 2010. 12. 8. 01:26
git를 사용하면서 과감히 commit을 삭제할 때가 있는데, 때로는 이걸 복구해야 할 때가 있다.
git reset --hard 혹은 git branch -D 를 실수로 했을 때가 그 대표적 예일 것이다.

결론부터 얘기하면 git reset --hard에 대해서 다음과 같이 복구할 수 있고,
$ git reset --hard HEAD@{1}
git branch -D에 대해서 다음과 같이 복구할 수 있다.
$ git branch <new branch> HEAD@{1}
=> $ git branch mybranch HEAD@{1}

사실상 git branch -D 는 실행 직후 아래와 같은 log를 참고하여
Deleted branch temp (was c64b6d0).
아래와 같이 복구할 수도 있다.
$ git branch <new branch> <commit>
==> $ git branch mybranch c64b6d0

이는 git 내부에 소위 쓰레기통 같은 것이 있어서 사용자가 reference를 삭제하더라도
reflog에서 30일간 reference를 유지하여 git의 garbage collection으로부터 보호하기 때문이다.
reflog는 HEAD의 commit 이동을 기록하며, 아래와 같은 명령으로 이를 확인할 수 있다.
$ git reflog
HEAD@{#}에서 #는 HEAD가 #번 이전에 reference한 commit으로 HEAD@{1}가 직전이기 때문에 위와 같이 복구할 수가 있는 것이다.

위 내용은 아래 참고 문서에서 보고 따라한 것으로
아래 문서에서는 git reset --hard를 하기 전에 git stash를 통해 임시 저장하거나,
cron과 같은 것을 이용해서 자동으로 매일 git stash 하여 저장하는 것을 추천하고 있다.

참고 : Git from the bottom up - Git from the bottom up

'Tool > git' 카테고리의 다른 글

git 알면 편한 기능  (0) 2010.11.13
git reference  (0) 2010.07.05
git staic build  (0) 2010.04.27
git init --bare 이용  (1) 2010.04.23
git init --bare 발단  (0) 2010.04.23
Posted by neodelicious
|