인프라/Git

[Git] git force 실수로 잃어버린 커밋 로그 복구하기

Razelo 2022. 3. 9. 16:24

오늘 프론트 팀에서 api 하나를 추가하달라고 하셔서 잠깐 이것저것 만지고 있었다. 

 

오랜만에 들어와서 만지는거라 잠깐 어색한 순간에 에러가 나는 것을 그냥 --force로 눌러버렸다. (솔직히 말하면 살짝 귀찮았다. 근데 대가가 너무 참혹했다.) 

git push -u --force origin main

 

문제없겠지하고 깃허브에서 리포를 살피는데 이런... 커밋 히스토리가 모두 날라갔다. 엥 왜 1커밋이 있지? 하고 살폈는데 이전 기록이 모두 사라졌다. 

 

사실 예전에도 이런 경우가 한번 있었다. 

170 커밋정도가 있었는데 정말 말 그대로 시원하게 싹 날렸었다. 아마 세달전이었던 것 같다. (근데 그때는 사실 혼자 작업하는 기간이어서 크게 문제가 되진 않는다고 생각하고 계속 진행했었다. )

 

그런데 이번에는 팀원이 있는 상태인지라 굉장히 난감한 상황이 되었다. 

 

구글링해보니 굉장히 많은 방법들이 있더라. 나 같은 사람들이 많았나보다. 

 

git force 복원 이라고 치기만 해도 자료가 주르륵 흘러나오니 그중 맘에 드는걸 찾아서 적용하면 된다. 

그런데 복잡한 방법들이 많길래 가장 간단한 방법들 사용했다. 굉장히 쉽다. (다른 방법들은 좀 귀찮다. )

 

우선 

git reflog 를 터미널에 친다. 그러면 여지껏 생성한 모든 히스토리가 모두 보일 것이다. 이중에서 돌아가고 싶은 곳이 어디인지 확인한다. 그리고 그 위치의 해쉬값을 확인한다. (맨 왼쪽에 있는 이상한 문자열이 해쉬값이다. ) 

대충 아래처럼 나올 것이다. 

 

 

확인했으면 아래와 같이 타이핑한다. 내가 돌아가고 싶은 곳이 예를들어 123a123라고 한다면 그곳을 입력해주는거다. 

git reset --hard 123a123

 

그리고 여기서 끝나면 적용이 안된다. 

 

여기서 

git push -u --force origin main

를 타이핑한다....?

 

(ㅋㅋ... force 때문에 이지경이 됬는데 다시 force를 쓴다... 이것보다 좋은 방법이 있겠지만 너무 당황해서 빨리 복구시킬 방법을 찾다가 이 방법을 택했다. )

 

어찌됬든 결론은 force는 진짜 조심히 쓰자. 아니 아예 쓰질 말자. 아니 그냥 아예 쓸 상황을 만들지를 말자.

 

결론은 깃 관리 잘하자. 협업툴에서는 확실히 명확한 동작을 아는 기능을 사용합시다.

 

아무거나 막 쓰면 고생함.  

 

 

반응형

'인프라 > Git' 카테고리의 다른 글

[Github] private repository 에 push하기 + ssh-keygen  (0) 2022.08.18
[Git] git conflict  (0) 2022.06.03
[Git] .gitignore 가 적용되지 않을때  (0) 2022.01.18
[Git] 깃 초기설정  (0) 2022.01.14
[Git] git branch & commit convention 정리  (0) 2022.01.12