git reset
특정 커밋을 기준으로 브랜치의 히스토리를 재설정,
이전 커밋 상태로 되돌리거나 히스토리에서 제거할 수 있다.
커밋, 스테이징, 작업 디렉토리에 영향
협업시에는 신중하게 사용
--soft)git reset --soft 커밋idgit reset 커밋id--hard)git reset --hard 커밋id

Unstaged changes after reset:
M test.js
작업디렉토리에서 파일이 변경된 상태로 남아있다고 알려준다

4, 5번째 커밋히스토리는 삭제되었지만 파일 내용은 남아있어서 다시 커밋하거나 수정가능하다


에러가 발생한다.

원격저장소에는 3, 4, 5번째의 커밋이 존재하는데 로컬저장소에는 존재하지 않아서 push 실행을 거부한다.
해결방안? $git push -f / --force 강제푸시 실행

강제푸시 실행된 결과
삭제된 3, 4, 5번째 커밋은 되돌릴 수 없나?


삭제되었던 3, 4, 5번째 커밋이 다시 복구된 것을 확인할 수 있다.
--hard 옵션을 사용하면 삭제된 커밋을 복구할 수 없다.

git reset --hard 명령어로 2번째 커밋 상태로 되돌렸기 때문에 커밋할 내용이 없다고 출력됨

원격저장소에도 2번째 이후 커밋들은 지워져있다.
--hard 처리해서 없어진 커밋들은 복구가 불가능한가??
git reflog(참조 로그)로 복구 가능하다

git reflog(참조 로그)는 커밋을 참조한 로그를 본다.
즉 HEAD 이동기록, 커밋에 대한 모든 변경 사항을 보관해준다.

1. $git reflog 로 커밋id, 커밋참조값 확인
2. $git cherry-pick 되돌리고 싶은 commit 복사
3. $git push