[Git] Revert: Repository에 Push한 Commit 되돌리기
기본적으로 local 에서 작업을 하다가 실수한 부분은 git reset
으로 돌리기가 가능하다. 그리고 해당 branch를 repository에 push 하게되면 충돌이 발생하기 때문에, 다음과 같이 수행해야한다.
$ git push [Remote] [Branch] --force
그러나 위와 같이 수행하는 것은 나 혼자서 해당 branch를 사용 할때다. 만약 해당 branch를 다른 사용자와 공유한다고 하면 다른 사용자가 push
할 때 충돌이 발생할 것이다. (나는 기존에 commit을 삭제하고 업데이트를 했기 때문에)
git revert
따라서 다른 사용자과 공유하는 branch에 대해선 git revert
를 통해 수행하는게 좋다.
만약 아래와 같이 git history가 있을 때, 우리는 002d5e3
의 반영분을 삭제하고 싶다고 가정하자.
$ git reflog 0d62cb6 HEAD@{0}: commit: Wrong commit 002d5e3 HEAD@{1}: commit: New Commit Point aa50c3e HEAD@{2}: clone: from /user/sip/users/km.hero.lee.l/00_Git/00_Test.git $ git revert 002d5e3 Finished one revert. [master d9ae8e1] Revert "New Commit Point" 1 files changed, 0 insertions(+), 1 deletions(-) delete mode 100644 test.txt
$ git reflog d9ae8e1 HEAD@{0}: commit: Revert "New Commit Point" 0d62cb6 HEAD@{1}: commit: Wrong commit 002d5e3 HEAD@{2}: commit: New Commit Point aa50c3e HEAD@{3}: clone: from /user/sip/users/km.hero.lee.l/00_Git/00_Test.git
결과를 보면 실제 002d5e3
때 작업한 부분이 삭제가 된 것을 확인할 수 있다. 명심해야 될 부분은, git revert
를 사용 할 때는 특정 commit stage 각각을 모두 지정해줘야 한다. 만약 여러 commit stage를 삭제하려고 하면 아래와 같이 start commit hash와 end commit hash를 명시해서 수행하면 된다.
$ git revert [commit hash start]..[commit hash end]
Revert의 가장 큰 장점은, commit을 삭제한 이력도 함께 log에 남는다는 점이다.