Git,  Programming

[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에 남는다는 점이다.

Leave a Reply

Your email address will not be published. Required fields are marked *