git reset이란?
앞서 다룬 git restore이 파일 단위을 커밋 단위로 제어 했다면, git reset은 전체 파일을 커밋 단위로 제어하기 위한 명령어이다. git reset을 사용하면 전체 파일들이 특정 커밋으로 돌아간다. 이때 돌아가기 위한 전략에는 두가지가 있다. 하나는 Plain Reset이라 불리는 전략이다. Plain Reset은 커밋을 제거한 다음 해당 커밋들에서의 변경 사항을 Working Directory로 Unstaged 되게 해서 복구한다. 두번째는 Hard Reset으로 커밋을 제거한 다음 변경 사항 또한 모두 제거해버리는 방식이다.
git reset [commit hash] 사용해 특정 commit 되돌리기
git reset을 사용하면 대상 커밋 해시와 현재 커밋 사이의 모든 커밋(a)들이 제거되고, 해당 커밋들(a)의 변경사항이 보존되는 Plain Reset 이 일어난다. 이때 커밋에서의 변경 사항은 Working Directory(Unstaged Area)에 저장된다.
git reset [commit hash]
예를 들어 kotlinworld.txt 파일을 수정하는 abc1edf 해시값을 가진 커밋이 있다고 했을 때 해당 커밋이 제거되면 해당 커밋에서의 수정 사항이 Working Directory로 다시 돌아간다. 즉 커밋은 제거하되 변경사항은 제거하지 않고 두는 것이 바로 Plain Commit이다.
git reset --hard [commit hash] 사용해 특정 commit으로 되돌리기
git reset --hard을 사용하면 대상 커밋으로 아예 돌아가버리고 변경사항들이 모두 제거되는 Hard Reset이 수행된다. 즉, 현재 커밋과 대상 커밋 사이의 모든 커밋이 제거되는 것은 물론 변경 사항 또한 제거된다.
git reset --hard [commit hash]
git reset은 작업 도중 많은 파일들이 변경되었을 때 한 번에 되돌리기 위해 많이 사용한다.
git revert란?
git revert는 하나의 커밋에서의 변경사항을 제거하기 위해 새로운 커밋을 만드는데 사용되는 명령어이다. git reset을 사용하면 현재 커밋과 대상 커밋 사이의 모든 커밋이 제거되기 때문에 중간의 하나의 커밋만 제거하기 위해서는 git revert를 사용한다.
예를 들어 1~3번 커밋이 있을 경우 2번 커밋만 제거하기 위해서는 git reset을 사용하면 3, 2가 모두 제거되므로 git revert를 사용한다. 이 것은 협업에 매우 중요한데, 만약 협업 중에 git reset을 사용하게 되면 다른 사람들이 가지고 있는 변경 사항을 내 컴퓨터에서 제거할 수 있기 때문이다. git revert를 사용하면 커밋의 변경사항을 제거하기 위해 새로운 커밋을 추가하는 것이므로 협업 시 다른 사람들에게 영향을 미치지 않는다.
git revert [commit hash] 사용해 특정 커밋의 변경 사항 제거하기
git revert [commit hash] 의 형태로 사용되며, 대상 commit hash의 변경 사항이 제거된 파일들이 Staging Area에 올라간다.
git revert [commit hash]