git은 버전관리 프로그램이기 때문에
언제든지 이전 commit으로 되돌아가거나
문제가 되는 commit 내역을 취소하거나 그럴 수 있다.
git restore / git revert / git reset 명령어써서 파일 복구하는 법을 알아보자.
파일 하나가 잘못되었을 경우 ctrl + z 여러번 눌러도 되겠지만
수정사항이 너무 많다면 명령어 하나로 처리할 수 있다.
git restore 파일명
최근 commit 된 상태로 현재 파일의 수정내역을 되돌릴 수 있다.
git restore --source 커밋아이디 파일명
입력한 파일이 특정 커밋아이디 시점으로 복구된다.
git restore --staged 파일명
이건 복구랑 상관없지만 이러면 특정 파일을 staging 취소할 수 있다.
코드 열심히 짜다가 갑자기 과거 commit 하나가 문제를 일으켜 test파일 commit을 취소 해야한다. commit 하나를 취소하고 싶으면 git revert
사용하면 된다.
실은 취소할 commit을 없애버리는건 아니고 취소한 commit을 하나 생성해준다.
git revert 커밋아이디
이거 입력하면 그 커밋아이디에서 일어난 일만 취소해준다.
실행하면 맘대로 커밋메세지 수정하고 닫으면 끝.
(그 커밋id 이후에 했던 파일이나 커밋들은 영향없이 유지됨)
git log 해보면 revert 해줬다는 commit이 자동으로 생성되어있다.
결론은 revert 명령어 쓰면 특정 커밋에서 있던 일을 지워버릴 수 있다.
(참고)
revert 할 때 동시에 여러개의 commit id 입력가능
git revert 커밋아이디1 커밋아이디2
그냥 최근 했던 commit 1개만 revert하고 싶으면 git revert HEAD
하면 편함
merge 명령으로 인해 새로 만들어진 commit도 revert 가능
git reset 명령어 사용하면 특정 commit 시절로 아예 모든걸 되돌릴 수 있다.
git reset --hard 커밋아이디
입력하면 그 커밋이 생성될 때로 시간을 되돌려준다.
작업폴더 내의 파일도 그 시절로 돌아간다.
🔼 그림으로 설명하면 이렇게 동작
commit2로 reset --hard 해버리면
commit2 이후의 미래 기억을 모두 잃음
reset하면서 파일을 아예 지워버리는게 아니라
검토하고 다시 commit 하고 싶으면 --soft / --mixed 사용해보자.
--mixed 는 기본값이다.
(참고)
여러명이서 협업하는 리포지토리에는 보통 reset 쓰면 안됨. 갑자기 소스코드가 사라지는거니까..
untracked 파일들은 (git add 안해놓은 파일들은) 사라지지않고 유지
git clean
명령어 찾아서 쓰면 untracked 파일들도 다 지울 수 있음