다른 프로젝트에서 git 하위 모듈에있는 일부 파일 작업을 시작했습니다. 그러나 git 서브 모듈이기 때문에 “master”를 체크 아웃하지 않고 헤드를 체크 아웃하고 모든 파일을 “no branch”의 폴더에 넣었습니다.
이 파일들을 우연히 변경 했으므로 프로젝트의 하위 모듈 인 “지점 없음”에서 작업하고 있음을 알게되었습니다.
해당 파일을 마스터와 같은 지점으로 가져와 구출 할 수 있습니까?
답변
git reflog“잃어버린”커밋을 찾는 데 사용할 수 있습니다 .
$ cd submodule_dir
$ git reflog # Find the commit
$ git checkout master
$ git cherry-pick $SHA_OF_MISSING_CMMIT
답변
“분기 없음”상태를 분리 된 HEAD라고합니다. HEAD ref가 어떤 브랜치에도 연결되지 않았기 때문에 대신 커밋을 직접 가리 키기 때문에 이것을 호출합니다. 현재 HEAD 커밋을 가리키는 분기에 HEAD를 연결하려면을 사용하십시오 git checkout -b branchname.
다음 순서로 HEAD에서 커밋을 포함하도록 기존 분기를 안전하게 업데이트 할 수 있습니다.
git branch temp
git checkout branchname
git merge temp
git branch -d temp
또는 reflog 표기법 HEAD@{1}을 사용하여 임시 브랜치를 만들지 않아도됩니다.
git checkout branchname
git merge HEAD@{1}
즉시 병합을 수행하지 않을 경우 임시 브랜치를 사용하는 것이 좋습니다.
HEAD에서 커밋을 가리 키도록 기존 분기를 강제로 덮어 쓰려면을 사용할 수 있습니다 git branch -f branchname && git checkout branchname. HEAD에서 커밋이 현재 branchname 팁을 기반으로하지 않는 경우 일반적으로 피하고자하는 branchname 이 빨리 변경 되지 않습니다 (이력을 다시 쓰는 것으로 간주 됨).
답변
이전 답변에 추가하려면
여전히 분리 된 HEAD에있는 동안 태그를 추가 할 수 있습니다.
git tag <some-tag>
커밋에 태그 를 추가하면 gitk다른 도구 에서도 볼 수 있습니다.