git의 “no branch”에서 파일 구조 및 커밋 그러나 git 서브 모듈이기 때문에

다른 프로젝트에서 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다른 도구 에서도 볼 수 있습니다.