본문 바로가기
Programming/Git

[Git] git revert 에러 (merge but no -m option was given)

by 배고프당 2020. 7. 17.
728x90

회사 팀에서 git을 사용하고 있는데 내가 커밋한 내역까지는 아무 이상 없던 코드가 팀원이 푸시한 코드를 풀로 받고나니 아뿔싸... 지금까지 만들었던 코드들이 다 날아가버렸다

얼마전에 블로그에 올렸던 revert 관련 포스트가 생각이 나서 이 참에 응용해서 사용해보면 좋겠다고 생각하고 긍정적으로 생각했다.

 

일단 문제는 팀원이 기능개발이 끝나고 Merge하는 시점에서 이전 팀원들이 기능개발, 수정, 버그 픽스한 코드들이 merge되지 않았다는 것...

예시 그래프

 

revert로 문제가 되는 Merge branch 커밋아이디를 revert 한 결과

 

git revert "COMMIT ID"

error: commit "COMMIT ID" is a merge but no -m option was given.
fatal: revert failed

이런 에러가 나는 이유는 병합 커밋을 실제로 의미하는것이 모호하기 때문에 git에서 revert를 거부하는 것이다.

병합 커밋을 되돌리려면 병합의 부모를 메인으로 간주하는, 즉 되돌릴 대상을 정확히 지정해야한다.

 

git cat-file -p "COMMIT ID"

위 명령어를 실행하면 

git cat-file -p 커밋아이디 실행결과

그림과 같은 결과가 나오는데 우리 팀 같은 경우에는 merge 부모를 두번째 parent로 해야하는데 첫번째 parent로 바라봐서 생긴 현상이었다. (부모 분기를 순서대로 표시함 / 첫번째 부모(-m 1), 두번째 부모 (-m 2)

 

부모를 알았으니 다시 revert 실행(예시: 두번째 부모로)

git revert "commit id" -m 2

위와 같이하니 기존에 없어졌던 코드들과 파일이 다시 생성되었다!

 

Good

끝!

728x90

댓글