기술노트/깃허브

Revert를 이용해서 여러가지 commit을 되돌리기

반응형

revert로 쉽게 커밋을 되돌릴 수 있고 

revert로 되돌리면 이전 커밋이 남기 때문에 좋다.

 

SourceTree 에서는 커밋 선택 - 우클릭 - 커밋 되돌리기를 통해 Revert를 할 수 있었다.

 

이때 되돌아가고 싶은 위치를 선택해서 되돌아가는 것이 아니라, 되돌리고 싶은 커밋을 되돌리는 것이다.

 

 

내가 파란색으로 선택한 커밋으로 되돌리고 싶다고해서 파란색으로 선택한 커밋을 우클릭 - 커밋 되돌리기를 하는 것이 아니라

 

이 친구를 우클릭해서 커밋되돌리기를 하는 것이다.

 

 

 

 

 

revert로 여러 커밋을 되돌리는 법? 최신부터 순서대로 revert를 반복 적용하면 된다.

 

main checkout한 상태에서 main을 클릭하고 브랜치를 만든다.

 

 

 

 

그리고 test1으로 파일을 하나 만들겠다.

 

내용은 이렇게 추가하였다.

 

 

 

 

 

 

 

소스 트리에도 다음과 같이 나왔다.

 

스테이지에 올리고 commit하자.

이때 커밋 내용은 commit1로 적자.

 

 

 

commit2를 추가하고 또 커밋을 할 것이다.

 

 

 

또 다시 스테이지에 올리고 커밋을 해준다.

이때 commit 내용은 commit2로 적자.

 

한번 더 해보자.

 

이렇게 써주고 

 

같은 방식으로 한 번 더 해준다.

 

 

 

 

 

이렇게 3개가 생긴 것을 볼 수 있다. 

 

이때 commit3이 들어간 내용을 없애고 commit2까지만 들어가있는 상태로 되돌리고 싶다면?

 

 

 

 

test 브랜치를 checkout한 상태에서 commit3를 선택 - 우클릭 - 커밋 되돌리기

 

 

 

그러면 Revert commit3가 뜨고

 

python에서도 commit3는 사라졌다.

 

그렇지만 commit3의 기록은 남아있는 상태이다.

 

 

다시 마음이 바뀌어서 Revert commit3를 취소하고 싶다면?

 

 

 

그냥 commit3를 선택 - 우클릭 - 이 커밋까지 현재 브랜치를 초기화(reset) - Hard mode 하면 된다.

 

 

 

 

그러면 다시 commit3가 나왔다.

 

 

python도 다시 돌아왔다.

 

만약 revert로 commit1까지 가려면 어떻게 해야할까?

 

먼저 commit3을 선택 - 우클릭 - 커밋 되돌리기

 

그래서 이 상태로 만든다.

 

내용도 사라진거 확인해준다.

 

이제 이 상태에서 

commit2를 선택 - 우클릭 - 커밋되돌리기

 

 

 

이렇게 해서 다시 commit1로 되돌아왔다.

 

즉 여러 커밋을 되돌리려면 최신 순서대로 revert를 여러번 해줘야한다.

 

 

 

 

 

근데 사실 이거는 명령어를 사용하면 편하다.

 

commit3을 선택 - 우클릭 - 이 커밋까지 현재 브랜치를 초기화(reset) - Hard mode 해서

 

다시 원래대로 돌아와보자.

 

 

 

 

 

 

 

 

즉 이상태에서 

 

 

 

 

SourceTree 우측 상단에 터미널을 클릭한다.

 

이런식으로 뜰 것이다.

 

이제 $ 뒤에 입력할 수 있는 커서가 생긴다.

 

이제 git revert HEAD 라고 치면 "가장 최근 커밋을 되돌려라" 라는 의미이다.

 

git revert HEAD HEAD~1이라고 치면 'HEAD~1'이 HEAD의 아빠라는 의미여서

"HEAD와  HEAD아빠를 순차적으로 되돌려라" 라는 의미이다.

 

그래서 git revert HEAD HEAD~1이라고 치면 

 

 

 

이렇게 나온다.

 

이 상태에서 빠져나갈때는 :wq를 써준다.

 

 

사진의 맨 밑에 보면

 

이렇게 쳐주면 된다.

 

혹시나 커서가 안보이더라도 일단 :wq라고 치려고 하면 커서가 생겨나면서 입력이 되는 것을 알 수 있다.

:wq라고 치고 enter치면?

 

이번엔 commit2가 나왔다.

 

 

:wq 해주면?

 

이제 enter를 치면?

이제 끝났다. 

 

이렇게 해서 commit3과 commit2를 되돌렸다.

 

짜잔~~

 

이렇게 terminal 창에서 이렇게 revert를 할 수도 있었다.

 

 

 이제 그냥 test branch로 다 보여줬으니 commit 1~3은 쓸모가 없다. 그러면?

 

 

 

test branch를 우클릭 - test 삭제 

 

이때 강제삭제를 선택해줘야 한다. 안그럼 error남.

 

test라는 브랜치로 만들었던 commit은 모조리 삭제되었다. 

 

이럭헤 장난치고 싶을때는 임시 branch를 만들어서 장난치다가 해당하는 branch를 삭제하면

깔끔하게 원래대로 돌아온다.