2012-12-11 4 views
5

에서 커밋 제거 나는 자식이 같은 역사를 커밋이 :이 참조되지 않은이 자식 저장소

  U 
     /
A---B---C---D---E master 

아무것도 포인트를 U 커밋,하지만 난 해시를 알고있다. 존재하지 않는 것처럼 저장소에서이 커밋을 완전히 제거하려면 어떻게해야합니까? 나는이 레포를 사용하는 유일한 사람입니다.

git rebase을 사용해 보았지만 분기 부분을 삭제하거나 커밋을 이동할 수는 있지만 커밋을 하나만 삭제할 수는 없습니다.

git checkout <hash>을 입력 한 다음 git reset --hard HEAD~1을 입력하면 더 이상 커밋되지 않습니다. 실제로 완전히 사라 졌는가 아니면 여전히 repo에 숨겨져 있습니까?

답변

2

결국에는 git에 의해 정리되지만 git gc을 보면 실제로 가비지 수집을 강제 할 수 있습니다.

clean 명령이 다르므로이 문제가 해결되지 않을 것입니다.

+0

전체 Repo를 복제하면 어떻게 될까요? 참조되지 않은 가비지 오브젝트도 복제됩니까? – Jawap

+0

@ Jawap : 아니오, 복제되지 않습니다. – Chronial

4

으로 단순히

git reflog expire --expire-unreachable=now --all 
git gc --prune=now 

git reflog expire --expire-unreachable=now --allreflog에 도달 할 수없는 커밋의 모든 참조를 제거 사용 here을 설명했다.

git gc --prune=now은 커밋을 제거합니다.

주의 : git gc --prune=now 만 사용하면 해당 커밋은 여전히 ​​reflog에서 참조되기 때문에 작동하지 않습니다. 따라서 reflog를 지우는 것은 필수입니다.

관련 문제