dangling commit
어떤 브랜치나 태그 등에서 더 이상 참조되지 않는 커밋을 말한다.
쉽게 말하면, Git 저장소 안에는 존재하지만 어디에서도 가리키고 있지 않기 때문에 보이지 않는 커밋이다.
🔍 왜 생기는 걸까?
- git commit 후, rebase나 reset으로 HEAD를 되돌렸을 때
- git rebase -i로 커밋을 삭제(drop) 했을 때
- 브랜치를 삭제했는데, 해당 브랜치에만 있던 커밋이 다른 브랜치와 공유되지 않았을 때
이런 경우 기존 커밋은 Git 내부에는 아직 존재하지만, HEAD도 브랜치도 더 이상 그 커밋을 가리키지 않게 된다.
→ 즉, dangling 상태
🕵️♀️ 확인 방법
git fsck --lost-found |
이 명령은 Git 저장소 내에서 dangling commit 등을 찾아 보여준다.
dangling commit 3f1c2e15b7f5d8c1d9e0ee81a3a0fa4c3c4ad5a2 |
해당 커밋은 Git 내부에는 존재하지만, 브랜치나 태그에서는 접근할 수 없는 "유령 커밋'이다.
🔁 복구 방법
복구 시점을 참조 할 수 있는 커밋 혹은 항목을 알고 있다면 언제든지 복구 가능하다.
1) reflog show를 사용하여 복구를 할 작업 시점 항목을 찾을 수 있다.
git reflog show <ref> |
2) reset --hard를 통해 사라진 커밋을 복구할 수 있다.
git reset --hard HEAD~N |
🧹 사라질 수도 있다
이전 reflog 글에서 reflog 보존 기간동안 사라진 커밋을 복구 할 수 있다고 했지만 Git의 가비지 컬렉션(GC) 또한 고려를 해야한다.
기본적으로 30일간 참조되지 않으면 깃의 가비지 컬렉션(GC)이 자동으로 삭제 할 수도 있기때문에 필요하다면 옵션을 미리 조정을 해야 한다.
수동으로 직접 dangling commit을 삭제하고싶다면?
git gc |
이 명령을 수동으로 실행하면 dangling commit을 삭제 할 수 있다.
참고
1) https://2hyes.tistory.com/168
Git: dangling commit이란?
깃이 필수인 세상, 이제는 모를 수 없다 ! - 사실 학교에서 git을 활용해서 프로젝트하는 과목을 안들어서, 내 맘대로 쓰고있었지만 어찌보면 뜬금없이 통계학과에서 프로젝트 수업을 들으면서 gi
2hyes.tistory.com
'Git > [인강] Git & Github 실무 활용 완벽 가이드' 카테고리의 다른 글
[Git & Github] 20. 사용자 지정 Git Alias 작성하기 -完- (0) | 2025.05.02 |
---|---|
[Git & Github] 19. Reflog의 힘 - '사라진' 작업 복구하기 (0) | 2025.05.02 |
[Git & Github] 18-1. 해시 함수 (1) | 2025.05.02 |
[Git & Github] 18. Git의 이면 - 해싱(Hashing)과 객체 (0) | 2025.05.02 |
[Git & Github] 17. 히스토리상의 중요한 순간에 표시하기 (0) | 2025.05.02 |