본문 바로가기
Linux & GIT

git revert 명령어

by 누워서 코딩 2022. 7. 20.

git revert

git 저장소에서 협업으로 작업을 하다 보면 이미 커밋된 내용을 되돌려야 할 경우가 종종 있습니다. 예로 새로운 기능을 두 명이 동시에 추가하거나 변경해서 버전이 발행되었는데, 발행 직후 치명적인 문제점이 발견되었다고 가정해봅시다. 그런데 안타깝게도 시간 관계상 바로 확인이 되지 않아 시간이 더 필요한 경우라면, 임시방편으로라도 기능이 추가된 파일들만 문제가 발견되지 않던 이전 커밋으로 되돌려야만 합니다. 이때 사용하는 명령어가 git revert 명령어인데, 비슷한 기능의 git reset 명령어와 헷갈리기도 합니다.

 

git rever와 git reset 차이점

하지만 여기에는 분명한 차이점 하나가 있는데요. 위에서도 언급했듯 두 명이 동시에 작업했다는 것에서 차이점이 있습니다. 즉 작업자 간에 코드를 공유한 경우라면 git revert, 공유하지 않고 오롯이 본인만 수정했다면 git reset를 사용해도 무방합니다.

 

협업으로 특정 파일을 공유했다면 무조건 git revert

협업으로 특정 파일을 여러명이 동시에 수정하는 경우, git reset 명령으로 특정 커밋으로 되돌리려면 다른 협업자가 수정한 내용과 충돌이 발생되는 문제가 종종 발생하기 때문입니다. 이 경우의 해결 방법이란 이미 원격 저장소에 push 한 내용을 강제로 force push 하는 건데, 그 순간 다른 누군가가 push 한 내용 역시 모두 날아가기에 절대 해서도 안 되는 행위입니다.

git commit -m "a"
git commit -m "b"
git commit -m "c"

git reset --hard ["a" commit hash]
git push

위의 예제처럼 git reset --hard 명령으로 "a" 커밋으로 되돌렸다면, 안타깝게도 "b"와 "c"의 커밋한 코드들은 모두 사라집니다.

 

git commit -m "a"
git commit -m "b"
git commit -m "c"

git revert ["a" commit hash]

 

이 경우는 "a" 커밋 이후 다른 작업자가 수정한 "b" "c" 커밋 내용은 유지한 채 "a" 커밋으로만 되돌립니다.

 

이런 이유로 보통 원격 저장소에서도 git reset은 사용하지 못하게끔 강제로 막아 놓는 게 일반적인데요.

결론은 동시에 여러명이 협업으로 작업하는 경우라면, 무조건 git revert 명령어를 사용합시다!

 

git revert 다양한 사용법

git revert --no-commit [commit hash]

 

--no-commit 옵션을 추가하면, git commit이 바로 되지 않고, Stage Area 상태로 유지할 수 있습니다. 조금 더 신중하게 특정 commit으로 되돌릴지 고민한다면 이 옵션을 추가해서 사용할 수 있습니다. 

 

git revert [commit hash]..[commit hash]

여러 commit hash를 선택해서 옵션으로 넣으면, 여러개의 특정 커밋 상태들로 되돌릴 수 있습니다.

 

댓글