source

Git 저장소에 있는 달링 커밋과 방울은 무엇이며 그것들은 어디에서 왔습니까?

manysource 2023. 6. 19. 21:42

Git 저장소에 있는 달링 커밋과 방울은 무엇이며 그것들은 어디에서 왔습니까?

나는 매달리는 커밋과 블롭에 대한 기본 정보를 찾고 있습니다.

내 저장소는 괜찮은 것 같습니다.그러나 나는 달렸습니다.git fsck처음으로 그것이 무엇을 했는지 알게 되었고 저는 '달린 블롭'의 긴 목록과 단일 '달린 커밋'을 가지고 있습니다.

이것들은 무엇입니까?그들은 어디에서 왔는가?저장소 상태에 대해 비정상적인(좋거나 나쁜) 징후가 있습니까?

Git 저장소로 작업하는 동안 작업을 중단하고 중간 블롭을 유발하는 다른 동작을 수행할 수 있으며, Git이 정보 손실을 방지하는 데 도움이 되는 몇 가지 작업도 수행할 수 있습니다.

결국 (조건부로 gitgc man 페이지에 따라) 가비지 수집을 수행하고 이러한 것들을 정리합니다.가비지 수집 프로세스를 호출하여 강제로 실행할 수도 있습니다.git gc.

이에 대한 자세한 내용은 git-scm 사이트의 유지 관리 및 데이터 복구를 참조하십시오.

GC를 수동으로 실행하면 기본적으로 이 명령이 실행되기 2주 전에 안전망으로 남겨집니다.Git 저장소의 성능을 보장하기 위해 GC를 가끔 실행하는 것이 좋습니다.하지만 다른 것들과 마찬가지로, 여러분은 여러분에게 중요할 수 있는 것들을 파괴하기 전에 그것이 무엇을 하고 있는지 이해해야 합니다.

Dangling Blob = 준비 영역/색인에 도달했지만 커밋되지 않은 변경 사항입니다.Git의 한 가지 놀라운 점은 일단 준비 영역에 추가되면, 이 블럽들이 해시도 가지고 있다는 점에서 커밋처럼 행동하기 때문에 당신은 항상 그것을 되찾을 수 있다는 것입니다!

Dangling commit = 하위 커밋, 분기, 태그 또는 기타 참조에 의해 직접 연결되지 않은 커밋입니다.이것들도 돌려받을 수 있어요!

https://web.archive.org/web/20210116144915/https ://tekkie.ro/news/howto-remove-all-dangling-commits-from-your-git-repository/ 에서 Git 저장소에서 모든 매달린 커밋을 제거하는 방법:

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

필요하다고 판단될 수 있으므로 삭제할 것인지 확인합니다.

매달리는 커밋은 참조와 관련이 없는 커밋입니다. 즉, 커밋에 도달할 방법이 없습니다.

예를 들어, 아래의 다이어그램을 생각해 보십시오.변경 사항을 병합하지 않고 분기 피쳐 X를 삭제한다고 가정하면 연관된 참조가 없으므로 커밋 D가 위험 커밋이 됩니다.마스터에 병합되었다면 HEAD와 마스터 참조는 커밋 D를 가리켰을 것이며 기능 X를 삭제하더라도 더 이상 매달리지 않을 것입니다.다이어그램 뒤에 있는 참고 사항을 읽고 이를 더 잘 이해하십시오.

Git는 자동으로 가비지를 수집합니다. 즉, 매달리는 커밋을 처리합니다.우리는 사용할 수 있습니다.git reflog병합하지 않고 삭제된 분기(커밋의 매달림)를 복구합니다.로컬 개체 저장소에 있는 경우에만 삭제된 커밋을 복구할 수 있습니다.수거된 쓰레기라면 회수할 수 없습니다.

enter image description here

분기 이름(즉, 분기 레이블)은 실제로 분기 또는 분기 팁에 대한 최근 커밋에 대한 참조입니다.위의 다이어그램에서 기능 X, 마스터 및 HEAD는 특정 커밋에 대한 참조일 뿐입니다.featureX 및 마스터 레이블은 각 분기의 최신 커밋을 나타냅니다.HEAD는 일반적으로 현재 체크아웃된 지점(이 경우 마스터)의 팁을 나타냅니다.현재 지점에서 이전 커밋을 체크아웃하면 HEAD가 분리된 상태가 됩니다. 즉, HEAD는 최신 커밋이 아닌 이전 커밋을 가리킵니다.HEAD는 실제로 현재 분기 레이블을 가리키고 모든 분기 레이블은 항상 분기의 끝을 가리키기 때문에 기호 참조라고 합니다.따라서 정상적인 상황에서 HEAD는 간접적으로 최근의 약속을 지적합니다.

별도로 Git는 커밋 그래프/이력을 지시 비순환 그래프로 나타냅니다.각 커밋에는 상위 항목에 대한 참조가 있습니다.따라서 커밋 다이어그램의 화살표는 하위 커밋에서 상위 커밋을 가리킵니다.지점의 이전 커밋에 도달하려면 최신 하위 커밋에 대한 참조가 필요합니다.

PS - 위의 다이어그램과 이해는 이 무료 코스를 통해 얻은 것입니다.비록 그 과정이 꽤 오래되었지만, 그 지식은 여전히 관련이 있습니다.

약속을 '수정'할 경우에도 위험한 약속이 발생합니다.예를 들어 많은 작업을 수행하고 테스트한 후 모든 파일을 커밋한 다음 README 파일 업데이트를 잊어버린 경우를 기억합니다.따라서 빠르게 변경하고 추가한 다음 "git commit --amend"를 사용합니다.이렇게 하면 커밋 기록에 연결된 새 커밋이 생성되고 원래 커밋은 그대로 유지됩니다.

언급URL : https://stackoverflow.com/questions/18514659/what-is-a-dangling-commit-and-a-blob-in-a-git-repository-and-where-do-they-come