본문 바로가기
개발/Git

Git 작업 복구

by 김첨지 2023. 5. 1.

 
 
git flow 전략으로 브랜치를 관리하고 있었다.
 
develop 브랜치에서 release 브랜치를 만들었고,
 
 수정 사항을 커밋 히스토리 변경 없이 합치고자하여 develop 브랜치에서 rebase 했다.

rebase전 develop 브랜치

 
로컬에서 rebase 후 develop브랜치의 히스토리는 깃허브의 히스토리와 달라졌고,
 
깃허브에 push 되지 않았다.
 

rebase 후 develop 브랜치

 
그러자 별 생각 없이 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