체인의정석

git에서 원격 저장소에 있는 커밋 되돌리는 방법 정리 본문

개발/git

git에서 원격 저장소에 있는 커밋 되돌리는 방법 정리

체인의정석 2023. 6. 9. 14:46
728x90
반응형

깃허브의 원격 저장소에 만약 잘못된 내용이 올라갔는데 이를 되돌리고 싶다면 어떻게 해야할까?

 

1. 기록안남기고 되돌리는 방법

먼저 되돌리고 싶은 커밋 수 또는 위치만큼 로컬에서 커밋을 되돌려 주어야 한다.

git reset --hard HEAD~3

이렇게 하면 3번째 커밋 전까지 되돌아가며

git reset --hard HEAD~1

이렇게 하면 최근 1개의 커밋 이전으로 돌아간다.

이렇게 하면 기록 자체가 남지 않게 된다.

이 경우 다시 push를 하면 pull이 다시 뜨게 되면서 최신이 아닌 상태에서 업데이트가 되게 되므로 push를 강제로 한번 실행시켜 주어야한다.

 git push -f origin master

위와 같은 명령어를 사용하면 강제로 푸시가 되므로 이전 상태로 강제로 되돌릴 수 있다.

 

이때 push -f 는 위험하므로 브랜치를 하나 더 만들어서 복제본을 만든 후에 진행을 해야 한다.



또한 한번에 뒤로 되돌리지 않을경우 (예를 들어 2번 뒤로 되돌리려는 경우)

해당 명령어를 2번 연속으로 쓰면 만약 이전 커밋이 머지였다면 2번째 전으로 되돌아가지 않는다.

git reset --hard HEAD~1
git reset --hard HEAD~1

 

따라서

git reset --hard HEAD~2

이렇게 해야 하며

더 안전한 방법은 다음과 같이 commit id를 먼저 검색한 뒤에 그 뒤에 지정해서 해당 커밋으로 되돌리고 push f를 해야 한다.

git reflog

 

 

2. 기록 남기고 되돌리는 방법

그러나 여러명이 작업하여서 되돌리는 것 자체도 기록으로 남겨야 한다면?

git revert (commit hash)

이렇게 git revert 뒤에 커밋 해시 값을 가져와서 시켜주면 되돌리는 것 자체도 기록에 남는다고 한다.

그리고 기록이 너무 많이 넘는게 싫다고 하면

git revert --no-commit (commit hash)

이렇게 하면 커밋 기록이 해당 부분에는 하나만 남는다고 한다.

그러나 각 해시를 일일히 처리하는 것이 번거로울 수 있으므로 이를 한번에 적용시키는 방법은

git revert --no-commit HEAD~3..

이런식으로 하면 된다고 한다.

만약 팀원들과 합의가 되어 있거나 특정 시간대에 혼자 쓰는 상황이라면 전자를 다같이 쓰는 상황이라면 후자를 선택하면 된다.

(물론 가장 깔끔한건 브랜치를 나눈 후 PR요청을 날려서 병합하는 것이다.)

 

 

 

728x90
반응형
Comments