목차
대상자
git push 한 후에 실수를 늦게 깨달았다! git push하기 전으로 돌리고 싶다!이런 분을 위해 글을 쓰고 있습니다.
주요 대처방법
git reset 명령 (이력이 남기지 않고 수정할 수 있음)
git revert 명령 (이력을 남기고 수정)
해결 방법
1.git reset
git reset을 실행하면 이전 커밋 상태로 돌아갈 수 있습니다. 주로 hard와 soft의 두 가지 옵션을 이용합니다.
$ git reset --hard HEAD^
이 명령을 실행하면 commit, add, 소스의 변경을 취소할 수 있습니다.
그러나, 로컬에서의 변경등은 남기고, git push만 취소하고 싶은 경우는 다음 명령을 실행해 주세요.
$ git reset --soft HEAD^
이 명령을 실행하면 커밋만 취소할 수 있습니다.
- 주의점 1
git reset 후에 수정된 내용을 푸시하려고 하면 이전 커밋과 충돌하여 오류가 발생하여 푸쉬할 수 없습니다.
그 때는 “-f” 옵션을 붙여 강제로 push해야합니다.
$ git push -f origin HEAD
이제 아무 일도 없었던 것처럼 수정할 수 있습니다.
- 주의점 2
과거의 이력을 재작성해 버리기때문에 팀 개발을 하고 있으면 컨플릭트(충돌)가 일어날 가능성이 있습니다.
- 주의점 3
git reset 시에, 직전의 커밋만 취소하는 경우는 「HEAD^」로 좋지만, 직전의 n개의 커밋을 취소하는 경우는 「HEAD~n」이라고 지정할 필요가 있습니다.
2.git revert
변경을 취소하는 대신 없앨 수 있습니다. (이력은 남음)
git reset과 달리 과거의 이력을 다시 쓰지 않기 때문에 안전하다고 할 수 있습니다.
$ git revert HEAD
이 명령을 실행하면 과거 커밋을 취소하는 새로운 커밋이 가능하므로,
$ git push origin HEAD
실행하면 다시 push 수 있습니다.
- 주의점
git revert는 안전한 취소 방법이지만 불필요한 이력이 남습니다.
요약
실수로 git push해 버렸을 때의 대처법은 2개 있습니다.
git reset 명령 (이력이 남기지 않고 수정)
git revert 명령 (이력을 남기고 수정)
각각 장점과 단점이 있으니 상황에 맞는 명령을 선택해 실행 하시길 바랍니다.