만약 로컬에 커밋을 하고 서버에 push까지 했는데 이걸 예전커밋으로 돌려야할 경우가 있다.
이럴 경우 3가지 방법이 있다.
1. Revert 를 이용 하자.
git revert <hashcode> // 해당 커밋내용의 반대되는 내용으로 커밋한다.
//코드를 추가 했다면 , 삭제하고, 수정했다면 원복하는 커밋이 생긴다.
git revert -n OLDER_COMMIT^..NEWER_COMMIT // Commit Range를 줘서 한번에 여러개의 Commit을 Revert할 때 쓰인다.
만약 돌아가려는 위치까지 커밋이 여러개라면 위에서 부터 순차적으로 Revert를 진행해줘도 하나씩 반대되는 커밋을 생성하면서
원래대로 RollBack을 시켜야 하는 불편함이 있다.
위 커맨드로 실행을 하고 오류가 발생하지 않았다면, 서버에 Push하면 롤백이 완성되었다고 할 수 있다.
주의) 만약에 이미 내가 서버에 올린 소스를 다른사람이 수정해서 중간에 다른 사람의 커밋이 섞여 있다면, Revert중간에 오류가 발생할 소지 가 있다고 생각한다.
2. Reset 이용하자.(위험 하지만 , 간단하다.)
git reset --hard <hashcode> //rollback하고 싶은 시점의 커밋으로 돌린다.
git push origin +master //강제로 현재 상태를 서버에 Update한다. origin , master 는 자신의 remote 이름과 브랜치 이름에 따라서 바뀔것이고 , //중요한건 "+" 이 기호이다 이게 강제로 overwrite하겠다는 커맨드 인것 같다.
//이커맨드를 실행하면 정말로 push 할것 인지 확인을 위한 Git Password를 확인한다.
//아마도 리스크가 큰 커맨드라서 확인을 하는 것 같다.
주의) 만약 내가 올린 코드를 누군가 받아서 이미 작업을 했다면, 그동안 롤백을 진행했고 , 다른 사용자가 이미 받은 코드로 작업을 해서 올린다면
어떤 오류가 발생할지 난 알 수 없다. ^^;
'Tools > GIT Tutorial' 카테고리의 다른 글
Git globalconfig 파일에서 difftool , mergetool 설정 하는 방법. (0) | 2018.04.06 |
---|---|
Git SubModule 사용하기 (0) | 2017.08.30 |
Local Git Repository를 Server에 옮기는 방법 (0) | 2017.04.19 |
Git Alias [유용한 나의 Alias] (0) | 2016.12.01 |
Git Log Filtering (0) | 2016.11.17 |