분리 된 HEAD 상태에서 git commit은 어떻게 분리 되었습니까?
이것은 일어난 일입니다.
지점 A가 있습니다. 지점 AI에서 많은 변경 사항이 적용되었습니다. 코드가 마음에 들지 갑자기 지점 A에서 이전 커밋을 확인했습니다. 그런 다음 더 많은 변경을 수행하고 지점 A에서 커밋했습니다. 이제이 커밋을 어디서나 사용할 수 없습니다. 이 코드를 잃어 잃어 발생하고 있습니까?
이전 커밋은 여전히 reflog에 있습니다.
git reflog
커밋 목록이 표시되고 "잃어버린 버린"이 있어야합니다. 새로운 지점으로 만들 수 있습니다. 예를 들어 SHA-1이 ba5a739 인 경우 이전 커밋에서 "new-branch"라는 새 분기를 다음과 같이 만들 수 있습니다.
git branch new-branch ba5a739
데이터베이스가 제거되면 "손실"커밋이 삭제됩니다.
커밋은 이미 지적했듯이 여전히 reflog에서 사용할 수 있습니다. 다른 답변 외에도 다음은 새 분기를 병합하지 않고 분리 된 HEAD 커밋을 현재 분기로 직접 인계하는 방법입니다 .
분리 된 HEAD 상태에서 수행 한 커밋의 SHA-1 해시를
git reflog
그런 다음 모든 커밋 해시를 가장 오래된 것부터 가장 오래된 것까지 순서대로 실행하십시오.
git cherry-pick <hash1> <hash2> <hash3> ...
예를 들어, "처음 7 자"짧은 해시 형식으로 주어진 것이 하나 뿐인 경우 :
git cherry-pick a21d053
이제 명령에서 언급 한 분리 된 HEAD 커밋 해시 당 하나의 커밋이 현재 분기에 새 커밋을 만듭니다. 또한 원래 커밋 메시지를 대신합니다.
다음 명령을 사용하여 강화 된 (매달린) 커밋을 사용하여 수 있습니다.
git fsck --lost-found
현재 헤드가 커밋 커밋 인 경우 감소 된 표시되지 않습니다.
git-fsck (1) 매뉴얼 페이지 에서 자세한 정보를 사용할 수 있습니다.
그런 다음 폐쇄 수있는 커밋에 분기를 만들 수 있습니다.
git branch new-branch ba5a739
작업 디렉토리의 상태에 대한 Git 용어는“ 분리 된 HEAD ”입니다. 여기 저축 을 하는 또 다른 곳이 있습니다.git reflog
$ git reflog
0b40dd6 HEAD@{0}: commit: my commit on detached HEAD
...
git-1.7.5.1이 도움이됩니다.
$ git checkout master 경고 : 당신은 연결되지 않은 1 커밋을두고 있습니다. 당신의 지점 중 하나 : 0b40dd6 분리 된 HEAD에 대한 커밋 새 지점을 유지하여 좋은 시간이 될 수 있습니다. 그렇게 광고 : 분기 분기 new_branch_name 0b40dd65c06bb215327863c2ca10fdb4f904215b 지점 '마스터'로 전환
당신은 그것을 잃지 사고 고, Git은 여전히 사본을 유지합니다 (그러나 현재 지점장에 의해 도달 할 수 없습니다). git reflog
명령을 사용하여 누락 된 커밋을 사용할 수 있습니다 . reflog는 브랜치 헤드의 히스토리 위치를 추적하고이를 사용하여 브랜치 헤드가 이전에 가리키고 바로 사용할 수 있습니다.
분리 된 헤드를 다시 git repo에 연결 다음 단계를 수행하십시오.
git checkout "your branch with path but without remote name"
예를 들어, 원격 이름이 출발지이고 지점 이름이 bugfix/somebranch
사용 된 경우git checkout bugfix/somebranch
git reflog
분리 된 분기의 커밋 목록에서 커밋 SHA를 가져옵니다.git cherry-pick "commit hash1" "commit hash2" "commit hash3"
git push
모든 설정 !!
Sourcetree에서 git reflog가 작동하지 않는다는 것을 GUI를 사용하여 수행하는 방법을 알아 맙니 다.
먼저 Command History (보기 : Show Command Output)에서 메시지를 찾아 "잃어버린"커밋을 찾습니다. 잃어버린 커밋 후 "Switching Branch"행사에 있기를 바라며 커밋 ID가 1234567 인 커밋 주석을 볼 수 있습니다.
커밋 ID를 다음 단계로 이동합니다.
상단에 "Branch"버튼을 특정 커밋을 수있는 "New Branch"대화 상자가 나타납니다. 그 커밋이있는 새 브랜치를 찾을 수 있습니다!
이것은 나를 위해 잃어버린 일을 되찾았습니다!
'IT' 카테고리의 다른 글
메인 패키지에 여러 파일이있는 프로젝트를 어떻게 "실행"할 수 있습니까? (0) | 2020.07.09 |
---|---|
여백 상단 푸시 외부 div (0) | 2020.07.09 |
정수는 여러 반환 값을 모의 (0) | 2020.07.09 |
어디서 발생의 메모리를 결정하고 있습니까? (0) | 2020.07.09 |
오류 : 테이블 xxx에 대한 테이블 공간이 존재합니다. (0) | 2020.07.09 |