원본(내꺼내가쓴다는데!) : 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의 커밋을 다시 복구시키면 파일이 다시 살아난다.



+ Recent posts