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"
위 명령어를 실행하면
그림과 같은 결과가 나오는데 우리 팀 같은 경우에는 merge 부모를 두번째 parent로 해야하는데 첫번째 parent로 바라봐서 생긴 현상이었다. (부모 분기를 순서대로 표시함 / 첫번째 부모(-m 1), 두번째 부모 (-m 2)
부모를 알았으니 다시 revert 실행(예시: 두번째 부모로)
git revert "commit id" -m 2
위와 같이하니 기존에 없어졌던 코드들과 파일이 다시 생성되었다!
끝!
728x90
'Programming > Git' 카테고리의 다른 글
[Git] Git stash 사용 방법 (0) | 2020.08.13 |
---|---|
[Git] authentication failed 초기화 방법 (0) | 2020.08.10 |
[Git]시점 되돌리기(reset, revert) (0) | 2020.07.10 |
[Git] 소스트리 및 이클립스 브랜치 만들기 / 충돌 / 삭제 방법 (0) | 2019.04.23 |
[Git] 소스트리 / 이클립스에서 브랜치 만들기(branch) (0) | 2019.04.23 |
댓글