git flow 전략으로 브랜치를 관리하고 있었다.
develop 브랜치에서 release 브랜치를 만들었고,
수정 사항을 커밋 히스토리 변경 없이 합치고자하여 develop 브랜치에서 rebase 했다.
로컬에서 rebase 후 develop브랜치의 히스토리는 깃허브의 히스토리와 달라졌고,
깃허브에 push 되지 않았다.
그러자 별 생각 없이 force fush했고 위와 같은 참사가 벌어졌다.
위 결과를 보고 역대급으로 아찔했는데,
다행히도 해결 방법을 쉽게 찾을 수 있었다.
git reflog 브랜치명
git reflog를 입력하면 위와 같은 로그들이 나오는데, 브랜치에서 작업했던 사항들을 모두 알 수 있게 되있다.
돌아가고 싶은 지점을 확인한 후
해당 로그 id 혹은 HEAD@{0-9} 값으로 reset해준다.
// rebase 하기 전의 상황으로 돌아가기 위해서 둘 중 하나를 입력하면 된다.
git reset --hard 3a36bfe
or
git reset --hard test@{1}
커밋 히스토리가 해당 지점으로 돌아간 것을 확인할 수 있다.
느낀점
사실 저 프로젝트가 main 브랜치와 develop 브랜치의 히스토리 텀이 유독 커 참사를 벌어진 것이지, 웬만한 브랜치에서 위와 같은 상황이 벌어지기란 쉽지 않다.
그럼에도 rebase는 원치 않은 결과를 가져올 수 있기에 신중하게 사용해야 한다.
테스트용 브랜치를 하나 만들어 rebase를 해본 다던지 방어적으로 접근 하는 것이 좋을 것 같다.
'개발 > Git' 카테고리의 다른 글
Git 작업시 personal access token 에러 (0) | 2023.06.20 |
---|---|
github에서 contributor되기 (0) | 2022.04.13 |