Git

[Git] Commit 수정 및 복구 (revert & reset)

neck392 2024. 11. 4. 00:34

 Commit된 내용을 되돌리거나 수정하고 싶을 때 revert 혹은 reset 명령어를 사용할 수 있다. 마찬가지로 각 명령어의 수행 방식(용도)은 다르며 목적에 알맞게 명령어를 사용해야 한다.

 

revert

 revert는 현재의 작업 공간을 일부 유지하면서 과거의 특정 commit만을 되돌리며 과거 시점의 commit으로 돌아가는 것에 대하여 변경 이력을 남긴다. 즉, commit을 되돌리는 것에 대한 새로운 commit을 생성하며 commit history에 기록된다.

revert 명령어를 사용하면 협업 프로젝트에서 이미 remote repository에 push 된 commit에 대하여 commit history를 유지하면서 복구할 수 있다.  

// commit 되돌리기
git revert <commit 해시값(ID)>

// 마지막 commit 되돌리기
git revert HEAD

 

reset

 reset 명령어는 특정 commit으로 이동하여 그 이후의 변경 사항을  삭제하고 수정할 때 쓰인다. 현재로부터 특정 commit 시점 사이를 전부 제거한다. 해당 commit 시점으로 이동하기에 작업 공간인 working directory와 stage area의 상태도 변화한다. 특정 commit 자체를 완전히 변경할 수 있으며 reset에 대한 기록이 commit history에 남지 않는다.

 

  • "--mixed" 옵션(기본 옵션) : 기본으로 적용되는 옵션, 특정 commit 이동하고 Unstage되지만 working tree는 유지
  • "--soft" 옵션 : 특정 commit 이동하고 현재 파일이 stage에 유지되며 working tree도 유지
  • "--hard" 옵션 : 특정 commit 이동하고 working tree와 stage area모두 삭제 즉, 현재 파일을 남기지 않음(복구 불가) 
// 특정 commit 시점으로 이동
git reset <commit 해시값(ID)>

// ex)
// 한 단계 이전 commit으로 되돌리고, working tree와 stage area의 변경 사항을 유지
git reset --soft HEAD~1

// 한 단계 이전 commit으로 되돌리고, stage area에서 제외 (기본 옵션)
git reset HEAD~1
git reset --mixed HEAD~1

// 한 단계 이전 commit으로 되돌리고, working tree의 변경 사항을 포함해 모두 제거
git reset --hard HEAD~1