Skip to content

revert - 이미 push한 커밋 취소 ​

  1. 커밋 취소 상황
    • 이미 리모트 레포지토리(remote repository)에 잘못된 커밋을 push한 경우, 해당 커밋을 취소해야 할 상황이 생길 수 있어요.
  2. git revert 명령어 사용
    • reset 명령어는 로컬에서는 가능하지만, 리모트에 이미 올라간 커밋을 취소할 때는 적합하지 않아요.
    • 이럴 때는 git revert [커밋ID] 명령어를 사용해요.
    • 해당 커밋이 했던 변경사항을 "반대로 수행하는 새 커밋"을 자동으로 만들어줘요.
    • 커밋 메시지를 입력한 뒤 저장하면, 원래 커밋 내용이 되돌아가요.
  3. push 과정
    • revert 커밋이 만들어진 후, 다시 git push를 해서 리모트 레포지토리에도 반영해요.
    • 이렇게 하면 로컬/리모트 모두에서 커밋 내용이 되돌아가지만, 커밋 히스토리는 남아요.
  4. reset과의 차이점
    • reset은 커밋 자체를 히스토리에서 제거하는 방식이라 이미 리모트와 동기화된 상황에서는 충돌이 발생할 수 있어요.
    • revert는 "변경을 되돌리는 새 커밋"을 만들어서 히스토리를 안전하게 유지할 수 있어요.
  5. 주의사항
    • push 전에 항상 커밋 내용을 신중하게 확인하는 습관이 중요해요.
    • 이미 push한 후라면 'reset' 대신 'revert'를 사용하세요.

→ git reset 시도시, 로컬 레포에 헤드가 이전 커밋을 가리킴 하지만 이 상태에선 push가 불가능함

  • why? 리모트 레포지토리에 있는 더 최신 커밋 Add square function이 존재하기 때문임 Pull 하고나서 다시 Push 하라고 안내문 뜸

→ git revert 하면 로컬 레포에 새로운 커밋이 생성 즉, 리모트 레포보다 한단계 더 나와있어서 Push 해도 문제 없음

여러 커밋 한 번에 취소하기 (git revert) ​

  1. 여러 커밋을 한 번에 revert 가능
    • 과거의 여러 커밋을 한 번에 선택해서 취소할 수 있어요.
  2. 실습 예시
    • README 파일을 꾸미기 위해 여러 번 커밋을 진행한 뒤, 이 중 일부(특정 구간의 커밋)만 취소하는 상황이 나와요.
    • 커밋 히스토리에서 취소하고 싶은 범위를 파악해요.
  3. 명령어 사용법
    • 범위 지정:

      bash
      git revert <시작커밋ID>..<끝커밋ID>
    • 주의점: <시작커밋ID> 바로 다음 커밋부터 <끝커밋ID>까지가 선택돼요. 시작 커밋은 포함되지 않아요.

  4. revert 진행
    • 명령 실행 후 커밋 메시지 입력창이 두 번 나오는데, 그대로 저장하는 게 좋다고 해요(어떤 커밋이 revert됐는지 알 수 있게).
  5. 결과 확인
    • 실제 파일이 초기화됐는지 확인.
    • 커밋 히스토리를 보면 revert 커밋이 새로 쌓인 것을 볼 수 있어요.
    • 작업이 끝나면 git push로 리모트 레포지토리에 반영.
  6. 브랜치마다 적용
    • 필요한 각 브랜치마다 똑같이 위 작업을 반복.
  7. 정리
    • 여러 커밋을 한 번에 revert할 때는 항상 커밋 범위 지정 형식과 포함 제외 규칙에 주의해야 해요.

정리 ​

resetrevert
방식커밋을 히스토리에서 제거변경을 되돌리는 새 커밋을 만듦
이미 push한 커밋push 불가 (리모트가 더 최신)그대로 push 가능

참고: 개인 Notion 학습 노트 (Git 공부)