Developer/GitHub

원격저장소에 올라간 커밋 되돌리기

jaddong 2020. 4. 21. 17:44
320x100
최근 업데이트 2020-06-02

원격저장소에서 커밋 히스토리 제어( reset/revert )

1. Reset 후 강제 push하기

Git에서 작성한 커밋들을 되돌리고 싶을 때, 아직 원격저장소로 push 하지않은 경우에는들을 기반으로 작성되 $ git reset {commit_id}으로 원하는 상태로 원상복구할 수 있지만, 아래 이미지처럼 이미 원격저장소로 push 해버린 경우에는 로컬에서 커밋을 되돌린 후에 강제로 push를 해야한다. 예로 아래 이미지처럼 HEAD에서부터 세 개의 커밋을 완전히 제거할 수 있다.

1-1. 로컬에서 되돌리고 싶은 커밋으로 간다

  • 아래 명령문을 여러번 실행하면서 원하는 커밋상태로 간다.
  • HEAD^으는 바로 아래 커밋으로 되돌리게 되고, HEAD~3와 같이 하게 되면 헤에서부터 최근 3개 아의 커밋으로 되돌리게된다.
$ git reset --hard HEAD^

1-2. 강제로 푸쉬하기

  • 원하는 상태의 커밋으로 돌아왔다면, 그 상태로 강제 푸쉬를 한다.
  • -f는 또는 --force강제로 푸시함 의미한다.
$ git push -f origin master

1-3. 주의사항

위의 방법은 커밋 히스토리를 강제로 조작한다는 점에 있어서 팀과 공유하는 원격저장소라면 타격이 있을 수 있다.

  • 본인 혼자서 작업하는 경우
  • 위의 방법으로 강제로 되돌린 커밋을 pull한 팀원이 없는 경

만약 위의 작업을 모르고 팀원이 작업 후 push한다, 내가 강제로 삭제했던 커밋들 다시 생성된다.

 

2. Revert 후 강제 푸쉬하기

1번의 경우, 커밋사항들을 전체적으로 삭제한 후 덮어쓰기가 되기때문에, 히스토리가 조작된다는 위험이 있다.

되돌렸다는 걸 히스토리에 남기기 위해서는 아래와 같이 revert를 하여 과거 커밋으로 돌릴 수 있다.

2-1. 되돌리고 싶은 커밋으로 간다

$ git revert [되돌리고 싶은 commit의 hash] 

또는 되돌리고자하는 커밋을 한 번만 생성하고 싶을 때

$ git revert --no-commit [되돌리고 싶은 commit의 hash] 

여러 커밋을 한꺼번에 돌리고 싶을 때 

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

2-2. 되돌리고 싶은 커밋으로 간다

Revert한 변경사항들을 커밋한다. 

$ git commit -m 'Revert "Commit C, B, A"'

1-2. 푸쉬하기

$ git push origin master

 


 

원격 저장소에 올라간 커밋 되돌리기

Git으로 버젼 관리를 하며 개발하다보면, 작성한 커밋들을 되돌려서 다시 이전 상태로 원상복구하고 싶은 경우가 한번쯤 있을 것이다. 만약 로컬까지만 저장된 커밋인 경우는 $ git reset 명령어를

jupiny.com

반응형