2012-08-28 3 views

답변

1

(내 이전 답변은 죄송합니다. 완전히 주제 해제).

git reflog 리모컨에서 git pull 또는 git clone 인 경우 각 커밋별로 실행되지 않으므로 이러한 커밋 중 하나에서 발생한 것일 수 있습니다.

또한 커밋이 90 일이 넘지 않았 음을 확인했는데, 그렇지 않은 경우 기본 gc 설정으로 변경되었습니다.

+0

감사합니다.하지만 분기가 삭제되거나 sha1 id가 변경된 경우에는 reflog에서 90 일 동안 사용할 수 있어야합니다 (표시되지 않음). 삭제 된 분기 또는 교체 된 sha1을 찾는 방법이 있습니까? –

+0

베어 리포에서 이것을 확인하고이 커밋을 2 일 전에했습니다. 커밋은 Gerrit codereview에서 체리 피클을 수행하여 복제에 적용한 다음 특정 분기의 베어 레포로 다시 푸시했습니다. 그러나 이제 해당 분기에서 커밋 ID를 사용할 수 없으며 해당 분기가 삭제되지 않았 음을 확신합니다. "git reflog"에 대한 정보도 없습니다. –

+0

가능한 원인 중 하나는 누군가 다른 사람이 rebase 또는 다른 것으로 분기를 변경하고 강제로 orgin으로 새 분기를 밀어 넣은 것일 수 있습니다. 변경을 요구하지 않고 강제로이 분기를 가져 왔습니다. 이것은 분기 또는 reflog에 표시되지 않은 커밋 ID를 삭제하지만 이미 제거하지 않은 경우 도달 할 수없는 객체 목록에 있어야합니다. – weynhamz

0

이러한 커밋을 댕글 커밋이라고하며, git fsck이 표시합니다. 그들은 git gc 또는 git prune이 실행될 때까지 여전히 git 저장소에 존재합니다. 일반적으로 git gc은 repo에 너무 많은 오브젝트가 없어져서 팩 파일에 압축 될 때 자동으로 실행됩니다. git gc 작업은 특정 시간 전에 danling 커밋을 제거합니다. git gc --prune=nowgit prune --expire=now은 이러한 커밋을 즉시 제거합니다. git config --global gc.auto 0은 자동 GC 실행을 비활성화합니다.

+0

Zheng에게 감사드립니다. gc가 이미 비활성화되어 있으므로 이것이 매달려 있다면 거기에 있어야합니다. "git fsck --unreachable | grep 98d0d"실행 중 ... –

+0

을 찾을 수 있는지 보도록하겠습니다. fsck에서 커밋 ID를 볼 수 없습니다. - unreachable ... 이상합니다. 커밋은 reflog, fsck, fsck - unreachable, branches에 나타나지 않지만 "git show "에 나타납니다. 그것을 발견하는 다른 제안? –

3

브랜치를 생성하고 커밋 한 다음 git branch -D으로 강제 삭제할 수 있습니다. 이 경우 커밋은 입니다. 이렇게하면이 유실됩니다. Reflog는 기존의 ref의 로그를 보여줍니다.

또한 명령은 HEAD의 reflog를 확인하지 않습니다. git reflog show HEAD을 시도해보십시오. 아직 가비지 수집되지 않은 경우 커밋을 포함 할 수 있습니다 (예 : 분리 된 헤드로 작성된 경우).

+0

좋은 답변입니다. 나는 이것이 거의 확실하다고 생각한다. – Christopher