main 브랜치로 이동해서 README에 문구하나 작성해주자
git checked main
'작심삼일' 이라는 문구를 넣어서 저장해주고 터미널에서 커밋해준다.
이 커밋을 리모트 레포지토리의 main 브랜치에 반영하기위해 push 해준다.
자 상황 예시는 끝났다.
지금 이미 main 브랜치의 리모트 래포지토리에 커밋이 올라가있는 상태인데
이미 push 해버렸고 .. 취소하려면 어떻게 하면 될까?
저 문구를 지우고 그냥 다시 커밋을 하면 될것 같지만 이러한 동작을 한번에 해주는 커맨드가 존재한다.
커밋 히스토리를 보자면..
여기서 이 최신 커밋에서 한 작업을 되돌리고 다시 커밋을 해주는 커맨드가 있다.
Git revert
revert는 되돌리다, 복귀하다 라는 뜻을 가지고있으며 말 그대로 최신 커밋에서 한 작업을 되돌려준다.
git revert [커밋아이디 4자리 = 62ec]
revert를 실행해주면 커밋메시지 입력창이 나오면서 내가 적었던 커밋 메시지가 보인다.
뭐 내용을 수정해도 되지만 그냥 냅두고 커밋 메시지 창을 종료하겠다.
그런 다음 내용을 확인해보면
작성했던 작심삼일 문구가 사라졌다.
히스토리를 보면 새로운 커밋이 하나 생긴 것을 볼 수있는데
작심삼일 문구는 직접 지우지 않았지만 단지 git revert라는 커맨드를 실행해서 작업을 되돌리는 커밋을 새로한것.
해당 커밋도 push 해주자
그러면 리모트 레포지토리의 main 브랜치에도 문구가 사라졌을 것이다.
내가 올린 글에서 reset을 설명했던 적이있었다.
그럼 어차피 문구를 추가하기 직전에 했던 커밋으로 reset을 하면 되는거 아닌가? 싶을 것이다.
만약 로컬 레포지토리에서만 작업중이였다면 그렇게 해도 좋다.
하지만 리모트 레포지토리를 두고 작업 중이라면 절대 그러면 안된다.
reset으로 커밋을 뒤로 되돌린다하더라도 push를 할 수없기 때문이다.
왜냐하면 현재 리모트 레포지토리에 더 최신 커밋이 있기 때문에 git pull을 하고나서 push 하라는 안내문이 뜰 것이다.
어디서 많이 본 방식인데?
지금 로컬 레포지토리가 리모트 레포지토리보다 커밋이 한 단계 이전에 있기 때문에 당연한 내용이다.
하지만 우리가 원래있던 상태에서 reset이 아니라 revert를 했다고 하면
로컬 레포지토리에서 하나의 커밋이 새로 생기게 된다.
이렇게 로컬 레포지토리에서 커밋이 한 단게 더 나와있게 된다면 이제 push해도 아무 문제 없다.
push를 하고나니 당연히 리모트 레포지토리에도 현재 커밋의 모습을 갖게 될 것이다.
그래서 reset 대신 revert를 사용하는 이유이다.
어디서 많이 해봤던 방식인데..? 한번 reset을 되풀이 해보는게 좋을 듯하다
Git revert로 여러 커밋 취소해보기
그런데 더 과거의 커밋을 대상으로, 여러 개의 커밋을 대상으로 한 번에 revert 하는 것도 가능하다.
README파일의 여러 커밋을 취소해보려면..
main 브랜치와 premium 브랜치에서의 README 파일에 해당한 커밋 모두를 지운다는 것은
그말은 즉 초기화 하는거랑 같다고 보면 된다.
커밋 히스토리를 보면 파일 업로드에 관한커밋을 제외한 README파일에 관한 커밋이 있을 것이다.
저 두 커밋을 revert 해보자
git revert [커밋아이디 1] .. [커밋아이디 2]
rever 뒤에 어느 커밋부터 어느 커밋까지 revert 할지 적어줘야하는데 레드박스 때문에 잘 안보이넹
아래부터 bc92 9eca 62ec a03d 순 이므로 bc92와 a03d를 적어주면 된다. 그 사이엔 점이 2개들어간다.
' git revert bc92..a03d '에서 점2개 ..은 9eca 62ec를 나타낸다고 볼 수있다
근데 여기서 주의할 점은 bc92..a03d 라고 적으면 bc92의 커밋은 포함 되지 않는다.
즉 bc92 커밋 다음부터 해당되는것
실행하면 커밋 메시지 입력창이 총 세 번 뜰 것이다.
위에서 했던 것처럼 커밋 메시지 수정해도되고 안해도된다.
단지 revert 할때 생긴 커밋이란 걸 알려주기 위해 내용을 유지하거나 revert 문구를 꼭 넣자
3개의 커밋 메시지 창을 닫으면 터미널에서 잘 적용 된 것을 볼 수있다.
커밋 히스토리를 보면 그 커밋들이 revert 된 것을 알 수있다.
새로운 revert 커밋 두개도 리모트 레포지 토리에 push 해주면 revert한 커밋들이 잘 반영 되었다.
이번에는 premium 브랜치로 가서 revert 해주자
git checked premium
main 브랜치에서 했던 것처럼 똑같이 작업해주자
-생략-
'Git' 카테고리의 다른 글
(24) Git - log all과 graph / 커밋 히스토리 보는 여러가지 방법 (0) | 2024.09.11 |
---|---|
(23) Git - reflog / reset 되돌리는 방법 (0) | 2024.09.11 |
(실무_3) Git Part2 - git blame / 코드 작성자 찾기 (0) | 2024.09.10 |
(실무_2) Git Part2 - git pull 와 git fetch (0) | 2024.09.10 |
(실무_1) Git Part2 - git push 전 git pull 하기 (0) | 2024.09.10 |