[Github 협업]Git에서 Push한 커밋 되돌리기

유재원·2024년 12월 26일
0

Git / Github

목록 보기
6/6

시작하며

  • 이 글에서는 Git에서 커밋 후 GitHub에 푸시한 내용을 되돌리는 방법을 정리해본다.
  • 혼자서 프로젝트 시 추천되는 강제로 되돌리는 방법과 협업에서 추천되는 새로운 커밋으로 되돌리는 방법이 나뉘어지는데, 이 점을 고려하면 좋을 것 같다.

강제로 되돌리기 (Reset + Push --force)

이 방법은 로컬과 원격 모두 특정 상태로 강제로 되돌리는 것이다. 기록이 덮어쓰기되므로 주의해야 한다.

예제 시나리오:

  1. 아래와 같은 커밋 히스토리가 있다고 가정한다.

    a1b2c3 (HEAD -> main, origin/main) 최근 잘못된 커밋
    d4e5f6 이전 정상 상태 커밋
    g7h8i9 이전 커밋
  2. d4e5f6 커밋으로 되돌리고 싶은 상황이다. 즉, push 이후에 실수해서 이전 상황으로 되돌아가고 싶은 상황이다.


상세 단계:

  1. 현재 브랜치 상태 확인

    git log --oneline
    • 출력 예시:
      a1b2c3 (HEAD -> main, origin/main) 최근 잘못된 커밋
      d4e5f6 이전 정상 상태 커밋
      g7h8i9 이전 커밋
  2. 되돌릴 커밋으로 로컬 브랜치를 초기화

    git reset --hard d4e5f6
    • d4e5f6 대신 되돌리고 싶은 커밋의 해시를 입력.
    • --hard 옵션은 파일 상태까지 포함해 이전 상태로 강제로 되돌린다.
  3. remote 브랜치를 강제로 업데이트

    git push origin main --force
    • --force는 remote 브랜치에 덮어씌울 때 쓴다.

주의사항

  • 협업 중이라면 강제 푸시는 팀원들의 로컬 작업과 충돌을 일으킬 수 있다.
  • 즉, 혼자서 사용할 때 주로 써야할 기능이지 싶다.

새로운 커밋으로 되돌리기 (Revert)

이 방법은 히스토리를 유지하면서 되돌리려는 작업의 반대 작업을 수행한다. 협업 프로젝트에서 권장되는 방법이다.

예제 시나리오:

  1. 아래와 같은 커밋 히스토리가 있다.

    a1b2c3 (HEAD -> main, origin/main) 최근 잘못된 커밋
    d4e5f6 이전 정상 상태 커밋
    g7h8i9 이전 커밋
  2. a1b2c3 커밋의 변경 사항을 되돌리고 싶은 상황이다. 앞에서 설명한 상황과 동일하다.


상세 단계:

  1. 되돌리기 커밋 생성

    git revert a1b2c3
    • 이 명령은 a1b2c3 커밋의 변경 사항을 무효화하는 새로운 커밋을 생성한다.
    • git revert는 remote 브랜치와 충돌 없이 기록을 안전하게 남긴다.
  2. 다수의 커밋을 한 번에 되돌리기

    • 특정 범위의 커밋을 되돌리려면:
      git revert <첫 번째 커밋 해시>..<마지막 커밋 해시>
      예:
      git revert d4e5f6..a1b2c3
    • 주의: 위 경우 범위 지정 시 <첫 번째 커밋>되돌리지 않고, 마지막 커밋까지 되돌리게 된다.
  3. 원격 브랜치로 푸시

    git push origin main
    • revert는 강제 푸시가 아니므로 안전하게 기록을 유지한다.

Revert 사용 팁

  • 되돌린 후, git log에서 새로 생성된 커밋을 확인한다.
    a1b2c3 최근 잘못된 커밋
    c9d8e7 (HEAD -> main, origin/main) Revert "최근 잘못된 커밋"

Reset과 Revert의 차이점

구분ResetRevert
작업 방식기존 기록을 삭제하고 강제로 상태를 되돌림되돌리려는 작업의 반대 작업을 새로운 커밋으로 생성
히스토리덮어씌워짐기록이 보존됨
협업 안전성낮음 (충돌 가능성 있음)높음
적합한 상황개인 작업 또는 잘못된 커밋을 제거해야 하는 경우협업 프로젝트에서 안전하게 되돌리고 싶을 때

결론

  • 혼자 작업할 경우, Reset을 사용
  • 협업 프로젝트에서는 Revert를 사용

마무리

  • 아무래도 애초에 처음부터 잘 commit하고 push하는게 가장 최선인 상황이겠지만, 항상 최선이기는 어렵기에 실수를 되돌릴 방법을 정리해보았다.

참고: [Git] reset과 revert 알고 사용하기

profile
나는 달린다

0개의 댓글