git revert, reset, restore

woolee의 기록보관소·2022년 11월 20일
0

개발환경

목록 보기
10/17

git restore

파일 하나 전체를 되돌리려면 (최근 commit 상태로 되돌리려면)
git restore ${file name}

특정 commit 시점으로 되돌리려면
git restore --source ${commit hash} ${file name}
commit hash(커밋id 같은 거)가 뭐냐면, git log 관련 명령어 쳤을 때 노란색으로 표시되는 글자들을 말한다.

특정 파일의 staging을 취소하려면 (add한 거 내릴 때)
git restore --staged ${file name}

git revert

특정 commit을 취소하고 싶으면 커밋id를 revert 뒤에 붙이면 된다.
git revert ${commit hash}

그러면 Vim 에디터가 뜨는데,
i를 눌러 커밋 내용 입력하고 esc > :wq 누르면 커밋 메시지 저장된다.

그리고 다시 커밋 log를 찍어보면 알겠지만
특정 커밋을 삭제하는 또 하나의 커밋을 한 것과 똑같다.

여러 개 revert 하려면
git revert ${commit hash 1} ${commit hash 2}
대신 이렇게 하면 커밋이 각각 만들어짐 (2개를 revert 했으면 2번 commit됨)

최근 commit을 취소하려면
git revert HEAD

revert를 취소하고 싶으면
git revert --abort

충돌 해결하고 나서는
git revert --continue

git reset

특정 커밋 시점으로 아예 되돌리려면
git reset --hard ${commit hash}
남발하면 당연히 위험하다. 다 날릴 수 있으므로

--hard는 특정 시점 커밋으로(커밋된 상태) 아예 돌아가고 (그 이후는 삭제)

--soft는 특정 시점 커밋으로(커밋 전, 즉 staging area에 있는 상태) 돌아간다. 커밋을 다시 할 수 있고, 그 시점 이후 커밋들이 삭제되지 않는다. (특정 시점 커밋을 재커밋하고 싶을 때)
git reset --soft ${commit hash}

--mixed는 특정 시점 커밋으로 돌아간다(staging조차 되지 않은 상태로. add랑 commit 둘 다 할 수 있는 상태로 ).
git reset --mixed ${commit hash}

--mixed가 기본값이므로 git reset만 입력하면 --mixed와 동일함(add까지 취소)

git reflog

git 작업을 하다가 실수로 작업들을 날리면
git reflog
여기에 모든 commit 기록이 나오므로
여기서 유실된 커밋id 찾아서 되돌리면 된다.

참고

How To Undo Git Add Command
git reset, revert로 이전 커밋으로 돌리기

profile
https://medium.com/@wooleejaan

0개의 댓글