파일 하나가 잘못되었을 경우 ctrl + z 여러번 눌러도 되겠지만
수정사항이 너무 많다면 명령어 하나로 처리할 수 있습니다.
--> 최근 commit 된 상태로 현재 파일의 수정내역을 되돌릴 수 있습니다.
--> 입력한 파일이 특정 커밋아이디 시점으로 복구됩니다.
--> 이건 복구랑 상관없지만 이러면 특정 파일을 staging 취소할 수 있습니다.
코드를 작성하던 중 과거의 commit이 문제를 일으킨다면 ??
지금 commit이 3개 있는데 여기서 b 파일이 문제가 많아서 b 파일을 만든 d874b2b commit을 취소하고 싶어진겁니다. commit 하나를 취소하고 싶으면 git revert 사용하면 됩니다. 실은 없애버리는건 아니고 commit 하나를 취소한 commit을 하나 생성해줍니다.
--> 그 커밋아이디에서 일어난 일만 취소해줍니다. 새로운 커밋이 생성되고 b파일만 뿅 삭제되어있습니다.
git log 다시 해보면 revert 해줬다는 commit이 자동으로 생성 되어있습니다.
작업폴더에서 a, c 파일은 있지만 b 파일은 삭제 되어있습니다.
결론은 revert 명령어 쓰면 특정 커밋에서 있던 일을 지워버릴 수 있습니다.
(참고)
revert 할 때 동시에 여러개의 commit id 입력가능
그냥 최근 했던 commit 1개만 revert하고 싶으면 git revert HEAD 하면 편리합니다.
merge 명령으로 인해 새로 만들어진 commit도 revert 가능합니다. 그럼 merge가 취소되겠군요 필요하면 찾아보셈
--> commit2로 reset --hard 해버리면 commit2 이후의 미래 기억을 모두 잃습니다.
(참고)
여러명이서 협업하는 리포지토리에는 보통 reset 쓰면 안됩니다. 갑자기 소스코드가 사라지는거니까요.
untracked 파일들은 (git add 안해놓은 파일들은) 사라지지않고 유지됩니다.
git clean 명령어 찾아서 쓰면 untracked 파일들도 다 지울 수 있습니다.
--> 이러면 a, b파일은 남아있고 c 파일이 삭제됩니다.
--> 이러면 a, c파일은 남아있고 b 파일은 staging area에 남아있습니다. 이제 commit 하거나 그럴 수 있습니다.
--> 이러면 a, c파일은 남아있고 b 파일은 staging 되지 않은 상태가 됩니다.
결론은 reset하면서 파일을 아예 지워버리는게 아니라 검토하고 다시 commit 하고 싶으면 --soft / --mixed 사용해봅시다.
실은 git reset 어쩌구만 하면 --mixed 옵션이 자동으로 발동됩니다.