오늘 프론트 팀에서 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 |