형상관리/GIT

[GIT] commit 내역 되돌리기 - reset, revert

steadyMan 2024. 7. 11. 01:54

git을 사용할때 커밋 히스토리를 삭제하거나 커밋 내용을 되돌릴때 사용하는 reset, revert에 대한 정리글입니다. 


reset

reset을 사용하면 커밋 히스토리를 아예 제거할 수 있다. 즉 커밋한 내용, 커밋 히스토리까지 모두 되돌릴수 있다. 

위에서 commit1(d8f04a8)로 되돌린다고 하면

  • git reset --옵션 HEAD~2(Head에서 두번째전)
  • git reset --옵션 d8f04a8(커밋 해시)

위 두개의 명령어를 입력하여 되돌릴수 있는데 "옵션"에 들어가는 옵션들은 다음과 같다. 

  • soft 
    • 새로운 HEAD(이동 대상)와 기존 HEAD간 변경사항을 staging area에 남겨둔다. 
  • mixed
    • 새로운 HEAD(이동 대상)와 기존 HEAD간 변경사항을 working directory(unStaged)에 남겨둔다.
  • hard
    • 새로운 HEAD(이동 대상)와 기존 HEAD간 변경사항을 제거한다.

만약 원격 저장소에 push한 이후에 되돌린다고 한다면 reset 후 git push --force를 사용하여 변경사항을

강제로 push해야한다. 하지만 force로 진행할 경우 다른 사람의 작업내역이 사라질수도 있기때문에 신중하게 사용해야한다. 

revert

commit한 내용을 되돌리면서 커밋히스토리는 보존하고 되돌린 이력까지 히스토리로 남기고 싶다면 revert를 사용한다. 

위에서 commit1(d8f04a8)로 되돌릴려면 commit3, commit2에 대한 revert를 수행한다. revert는 변경사항을 되돌리는 새로운 커밋을 생성하면서 기존 커밋 히스토리는 유지한다. 

  • 단일 커밋 되돌리기 
    • git revert <commit_hash>
  • 여러커밋 되돌리기 
    • git revert <commit_hash> <commit_hash> ...

위의 경우 commit1까지 한번에 되돌린다고 하면

"git revert ffdf7b5 731e86a" 이 명령어를 입력하면 되고 그렇게되면

이렇게 commit3위에 commit3, commit2를 되돌리는 commit이 생성된다. 이는 커밋히스토리를 보존하면서 새로운 커밋을 생성하기 때문에 원격저장소에 push를 한 이후에도 원활하게 사용이 가능하다.