git의 "no branch"에서 파일 구조 및 커밋


11

다른 프로젝트에서 git 하위 모듈에있는 일부 파일 작업을 시작했습니다. 그러나 git 서브 모듈이기 때문에 "master"를 체크 아웃하지 않고 헤드를 체크 아웃하고 모든 파일을 "no branch"의 폴더에 넣었습니다.

이 파일들을 우연히 변경 했으므로 프로젝트의 하위 모듈 인 "지점 없음"에서 작업하고 있음을 알게되었습니다.

해당 파일을 마스터와 같은 지점으로 가져와 구출 할 수 있습니까?

답변:


28

git reflog"잃어버린"커밋을 찾는 데 사용할 수 있습니다 .

$ cd submodule_dir
$ git reflog          # Find the commit
$ git checkout master
$ git cherry-pick $SHA_OF_MISSING_CMMIT

그렇습니다. git merge $COMMIT_SHA한 번만 제외하고 다른 지점에있었습니다.
Xeoncross

3

"분기 없음"상태를 분리 된 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가 여전히 지점에 있지 않은 마지막 커밋을 가리키고 있다고 가정합니다. 그 이후로 HEAD를 옮겼는데 지금 무슨 일이 일어 났는지 깨달았다면 reflog에서 그 손실 된 커밋을 찾아야 할 수도 있습니다 (mipadi의 답변 참조).
LarsH

1

이전 답변에 추가하려면

여전히 분리 된 HEAD에있는 동안 태그를 추가 할 수 있습니다.

git tag <some-tag>

커밋에 태그 를 추가하면 gitk다른 도구 에서도 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.