원본(내꺼내가쓴다는데!) : http://blog.naver.com/imf4/220769340334
GitHub : commit 히스토리를 push 하기 전에 취소 & 복구시키기
commit 취소
$ git reset HEAD^ : 최종 커밋 취소 & 파일 변경 x
$ git reset --hard HEAD^ : 최종 커밋 취소 & 관련 파일 복구.
$ git reset HEAD~n : 마지막 n개의 커밋을 취소 & 파일 변경 x
$ git reset --hard HEAD~n : 마지막 n개의 커밋을 취소 & 관련 파일 복구.
commit 복구
$ git cherry-pick [커밋 넘버] : 복구하고자 하는 커밋넘버를 사용하여 커밋을 복구
* 커밋넘버
git reset HEAD~n의 개념은 git reset HEAD^ 의 예제를 보면 이해할 수 있으니
git reset HEAD^ 명령과 git reset --hard HEAD^ 에 대한 실습만 진행 해 보겠다.
git reset HEAD^ 실습
Step1. 현재 commit된 히스토리를 git log --stat 으로 확인한다.
Step2. 현재 최근 커밋에 해당하는 160722.txt의 Windows Explorer상에서의 모습.
Step3. git reset HEAD^ 로 가장 최근 commit 을 취소시킨다.
Step4. git log --stat 으로 commit 취소 된 것 확인
Step5. 파일 안지워짐
git cherry-pick [커밋넘버] 실습
Step1. 복구하고자 하는 커밋넘버 중 최소 5자리만을 입력해도 좋다. 현재 실습에서는 방금 취소했던 커밋넘버로 복구를 해보겠다.
아래 메시지는 복구하려는 커밋에 해당하는 160722.txt 파일마저도 복구가 되려는 것을 알 수 있다.
필자는 160722.txt를 지우지 않은 상태로 냅뒀기 때문에 덮어쓰기를 할 수 없다는 에러메시지가 떠서 cherry-pick이 실행이 되지 않았다.
Step2. 원래의 텍스트파일의 이름을 바꾸엇으니 다시 git cherry-pick [커밋넘버] 명령으로 커밋복구를 시키고, 그에 따른 파일도 복구 된 것을 확인한다.
git reset --hard HEAD^ 실습
Step1. git cherry-pick 4d41a 을 완료한 상황에서 곧바로 실습 진행한다.
Step2. git reset --hard HEAD^ 명령을 입력하면,
가장 최근의 커밋을 가리키는 HEAD가 3e222b0 인 것을 확인 할 수 있다.
이것은 가장 위에 있던 커밋을 지우고 바로 밑에 있는 커밋히스토리의 커밋넘버이다.
Step3. git log를 보면 실제로 가장 마지막 commit의 커밋넘버는 3e222b0 으로 시작하는 것을 확인 할 수 있다.
Step4. 160722.txt에 해당하는 커밋이 사라졌으므로 자연스레 160722.txt도 없어졌다.
Step-final. 160722.txt의 커밋을 다시 복구시키면 파일이 다시 살아난다.
'GitHub' 카테고리의 다른 글
GitHub_Git Bash : Branch란? Branch 만들기 & 확인 (0) | 2017.04.27 |
---|---|
GitHub_Git Bash : remote 저장소 push하려는데 reject될때 조치방법 (0) | 2017.04.27 |
GitHub_Git Bash : git log - repository의 commit 로그 확인하기 (0) | 2017.04.27 |
GitHub : Stating시 종종 보이는 CRLF와 LF 알기 (0) | 2017.04.27 |
GitHub_Git Bash : 로컬PC안의 git Repository 수정사항 commit & push하기 (0) | 2017.04.27 |