programing

분리된 HEAD 상태에서 생성된 Git 커밋은 어떻게 됩니까?

magicmemo 2023. 7. 10. 22:14
반응형

분리된 HEAD 상태에서 생성된 Git 커밋은 어떻게 됩니까?

다음과 같은 일이 발생했습니다.

저는 A 지점을 가지고 있습니다.A 지점에서 나는 많은 변화를 일으켰습니다.코드가 마음에 들지 않아 A 지점에서 이전 커밋을 확인했습니다.그런 다음 저는 많은 변경을 가했고 A 지점에 커밋했습니다.이제 어디에서도 이 약속을 찾을 수 없습니다.내가 이 코드를 잃어버렸나요?

이전 커밋은 여전히 리필로그에 있습니다.

git reflog

커밋 목록이 표시되고 "잃어버린" 커밋이 여기에 있어야 합니다.당신은 그것을 새로운 지점으로 만들 수 있습니다.예를 들어 SHA-1이 ba5a739인 경우 이전 커밋에서 "new-branch"라는 새 분기를 만들 수 있습니다.

git branch new-branch ba5a739

데이터베이스를 제거할 때 "손실된" 커밋이 삭제됩니다.

이미 지적했듯이, 당신의 커밋은 리프로그에서 여전히 사용 가능합니다.다음은 다른 답변 외에도 새 분기를 만들고 병합하지 않고 현재 분기로 분리된 HEAD 커밋을 직접 인계하는 방법입니다.

  1. 분리된 HEAD 상태에서 수행한 커밋의 SHA-1 해시를 찾습니다.

     git reflog
    
  2. 그런 다음 모든 커밋 해시를 가장 오래된 해시부터 가장 최근 해시 순서로 실행합니다.

     git cherry-pick <hash1> <hash2> <hash3> ...
    

    예를 들어, "처음 7자" 짧은 해시 형식으로 지정된 하나만 있는 경우:

     git cherry-pick a21d053
    

이렇게 하면 명령에서 언급한 분리된 HEAD 커밋당 하나의 커밋으로 현재 분기에 새 커밋이 추가됩니다.또한 원래 커밋 메시지를 이어받습니다.

다음 명령을 사용하면 손실된(위험한) 커밋을 찾을 수 있습니다.

git fsck --lost-found

현재 헤드가 커밋에 매달려 있는 경우 손실로 나열되지 않습니다.

git-fsck(1) Manual 페이지에서 자세한 정보를 찾을 수 있습니다.

그런 다음 손실된 커밋에 분기를 생성할 수 있습니다.

git branch new-branch ba5a739

작업 디렉터리의 상태를 나타내는 Git 용어는 "분리된 HEAD"입니다. 저장하는 다른 위치가 있습니다.

$ git reflog
0b40dd6 HEAD@{0}: commit: my commit on detached HEAD
...

다른 지점을 확인하려고 하면 git-1.7.5.1에서 유용한 제안을 합니다.

git 체크아웃 마스터경고: 하나의 커밋을 남기고 연결되지 않았습니다.분기:

0b40dd6 분리된 HEAD에 대한 나의 커밋
새 분기를 생성하여 유지하려면 지금이 적합한 시기입니다.수행할 작업:

git branch new_name_b40dd65c06bb2153273c2ca10fdb4f904215b
지점 '마스터'로 전환됨

Git는 여전히 복사본을 보관하고 있지만 현재 지점장이 이 복사본에 연결할 수 없습니다.은 다을사커찾수있다습니를 사용하여 수 .git reflog지휘권reflog는 분기 헤드의 과거 위치를 추적하며, 이를 사용하여 이전에 분기 헤드가 가리켰던 항목을 찾을 수 있습니다.

분리된 머리를 Gitrepo에 다시 연결하려면 다음 단계를 수행합니다.

  1. git checkout "your branch with path but without remote name"

이 예: 원격이오지점이름이고인 bugfix/somebranch그 다음에 사용git checkout bugfix/somebranch

  1. git reflog분리된 분기의 커밋 목록에서 커밋 SHA 목록을 가져옵니다.

  2. git cherry-pick "commit hash1" "commit hash2" "commit hash3"

  3. git push

준비 완료!!

소스트리에서 gitreflog가 작동하지 않는 것을 발견하고 GUI를 사용하여 이 작업을 수행하는 방법을 알아냈습니다.

먼저 명령 기록에서 메시지를 찾아 "잃어버린" 커밋을 찾습니다(보기:명령 출력 표시).잃어버린 커밋 뒤에 "지점 전환" 명령이 있으면 1234567 커밋 ID의 커밋 주석이 표시됩니다.

해당 커밋 ID를 다음 단계로 이동합니다.

상단 도구 모음에서 "Branch" 버튼을 누르면 특정 커밋을 지정할 수 있는 "New Branch" 대화 상자가 나타납니다.거기에 커밋 ID를 넣고 새 지점 이름을 지정한 다음 지점 만들기를 누르면 손실된 커밋으로 새 지점을 얻을 수 있습니다!

이것은 저에게 잃어버린 일을 가져다 주었습니다!

언급URL : https://stackoverflow.com/questions/9984223/what-happens-to-git-commits-created-in-a-detached-head-state

반응형