Git에서 커밋 이력을 되돌리는 방법은 Revert와 Rebase가 있다. 두 명령어의 차이는 Reset은 커밋한 이력 자체를 없애버리지만, Revert는 커밋한 이력을 그대로 둔 채 새로운 Revert 커밋 이력을 만드는 것이 차이이다. 두가지 명령을 사용하는 방법을 정리하려 한다.
Reset은 이전 커밋으로 돌아감과 동시에 그 이후의 커밋 이력을 삭제한다. 또한, 옵션을 통해 인덱스(Stage)와 워킹 디렉토리의 상태까지 결정할 수 있다.
git reset --hard <돌아갈 커밋>
으로 사용하는 hard
옵션은 워킹 디렉토리와 인덱스의 상태까지 모두 지워버린다. 즉, 완전히 해당 커밋의 상태로 바뀐다.
git reset --soft <돌아갈 커밋>
으로 사용되는 soft
옵션은 워킹 디렉토리와 인덱스의 상태를 그대로 유지한다.
기본값으로 적용되어 있으며, git reset --mixed <돌아갈 커밋>
로 명시적으로 사용할 수 있다. mixed
옵션은 워킹 디렉토리의 상태는 유지되지만, 인덱스는 초기화된다.
Revert는 상태만 되돌린다. 커밋 이력은 그대로 남기고, revert했다는 것을 커밋 이력에 남긴다. revert하는 과정에서 충돌되는 파일이 있을 경우, 적절히 수정을 해주어야 한다.