Computer Science

Git: dangling commit이란?

깃이 필수인 세상, 이제는 모를 수 없다 ! 

-

사실 학교에서 git을 활용해서 프로젝트하는 과목을 안들어서, 내 맘대로 쓰고있었지만 
어찌보면 뜬금없이 통계학과에서 프로젝트 수업을 들으면서 git활용을 (제대로) 하기 시작했다ㅋㅋㅋ 
tmi: 통계학 교수님께서 언제부터 git을 썼냐, 어떻게 배웠냐고 물어보셨는데... 사실 저는 주전공인 컴과에서 git을 배운적이 없고요.. 질문 주신 교수님의 프로젝트 수업을 할 때, 뚝딱거리면서 혼자 배우면서 썼읍니다..

회사 생활을 하면서 보니, 나는 정말 원격 저장소와 로컬 저장소의 개념조차 제대로 이해하지 않고 사용했음을 깨닫고...
내 머리를 여러번 내리쳐 가며 Git을 공부하고 있다. 

지금도 아직까지 배워가고 있는 중이지만, 공부하면서 중요하다 생각했던 개념들과 명령어들을 블로그에도 공유해보려고 한다.

-

오늘의 주제: dangling commit object

 

image ref: https://mindmajix.com/git-rewriting-history

댕글링 오브젝트. 이름은 참 귀엽지만, 처음에 접했을 때는 너무 당황스러웠다. 깃은 왜이리 개념이 많냐며 이마를 짚었었던.. 🤦🏼‍♀️

본론으로 돌아가서, dangling commit object란  '잃어버린 커밋'이다.
잃어버렸다 == 찾지 못한다는 의미로, 프로그래밍을 할 때에도 참조하는 point를 잃으면 더 이상 해당 저장소에 접근하지 못하는 개념과 비슷하다. 자세히 말하면, branch 혹은 tag가 해당 커밋을 포함하고 있지않아서, 정상적으로는 접근할 수 없는 커밋이다. 
그러나 커밋의 id를 알고 있다면, 다시 참조할 수 있다. git log를 참고하면, garbage collection이 수행되기 전까지는 되돌릴 수 있다는 점!

만약, 현재 커밋에서 reset --hard HEAD^로 되돌렸다고 가정하면, 원래 HEAD가 가리키던 커밋이 바로 dangling commit이다. 
우리 눈에는 없어진 것 처럼 보이지만, 사실은 commit id로 저장이 되어있고, 우리가 브랜치나 HEAD로 접근할 수 없을 뿐이다. 그 dangling commit이 필요하다면, git log로 해당 커밋의 id를 찾아내어 main브랜치(혹은 현재 작업중인 브랜치)로 rebase를 해서 다시 참조할 수 있도록 만들어주면 된다.

 

데이터 복구하는 방법은 여기 참고하면 되겠다.