2017-10-27 9 views
1

커밋하고 원격 (bitbucket) repo로 푸시 한 일부 오래된 변경 사항이 있습니다. 이러한 변경 사항은 다른 지사와 병합되지 않았습니다. 지점 자체가 로컬 및 원격 저장소에서 제거되었습니다..git : 제거 된 분기의 커밋을 가져 와서 적용하십시오.

그러나 bitbucket 웹에서 볼 수 있듯이 (repo에서) 제거 된 분기에 커밋이 포함되어 있습니다. 내가 많이 봤지만 검색 길을 찾지 못했습니다 원격 지점에서 제거 된 커밋을 커밋합니다. 내가 할 수있는 유일한 방법은 bitbucket web에서 그들을보고 거기에 커밋을하는 것입니다.

나는이 가능하며, 항상

fatal: reference is not a tree: <sha> 

그래서 다음과 같은 오류가

git checkout <sha> 

또는

git checkout -b <branch-name> <sha> 

그러나 같은 몇 가지 예를보고 내가 검색 할 수있는 방법 (가져 오기) 이것들은 리모트, 크레이트 브랜치로부터 커밋되어 브랜치를 릴리스하도록 병합됩니까?

답변

0

삭제 된 커밋을 체크 아웃하는 것에 대해서는 Stack Overflow에서 아무것도 보지 못했습니다. 그러나,을 통해 커밋 삭제 A와 하드 리셋을 할 수 있어야한다 : 삭제에 some_new_branch 커밋 분기를 재설정 할

git checkout -b some_new_branch 
git reset --hard <SHA-1 of deleted commit> 

이, 아마도 이것은 당신이 진행하기에 충분하다.

Bitbucket에 표시된 삭제 된 커밋이 reflog에서 오는 것으로 가정합니다. 그렇다면, 당신은 또한을 통해 삭제 된 커밋을 볼 수 있어야합니다 : 당신이 당신의 삭제 커밋을 볼 수 없습니다 할 경우

git reflog 

, 그때 그것은 또한 당신이 겪고있는 오류를 설명 할 수 있습니다. 이 경우, 삭제 된 커밋이 실제로 Bitbucket에만 존재한다면, 당신은 그들에게 접근 할 수있는 다른 방법이 필요합니다.

+1

이 답변은 질문에 따라 이미 시도 된 것을 수행 할 것을 제안합니다. – Martin

+0

@Martin reflog 커밋을 체크 아웃하는 것에 대해 아무것도 발견하지 못했습니다. 의심이 옳다면 그의 커밋은 이미 reflog에서 지워졌습니다. 그렇다면 Bitbucket에서 여전히 그들을 볼 수 있다는 것이 이상합니다. –

0

Bitbucket (아직 최근 활동이 아님)에서 커밋을 볼 수 있으면 일부 분기 또는 일부 태그에서 계속 커밋 할 수 있습니다. git fetch을 실행하여이 refs의 최신 버전을 얻을 수 있으며 로컬 저장소에없는 특정 커밋도 다운로드됩니다. 그러나 fatal: reference is not a tree: <sha> 오류는 sha이 커밋이 아님을 의미합니다. 그것은 아마 blob 일 것입니다. 올바른 커밋을 찾으면 git checkout <commit> 또는 git checkout -b <branch-name> <commit>이 작동합니다.

+0

로컬 기록에이 커밋이 없으므로 을 가져올 수 없습니다. 원격 저장소에만 표시됩니다. 그래서, 우선, 어떻게 든이 커밋을 원격에서 가져올 필요가 있습니다. – Yury

+0

커밋이없는 경우 어떤 sha1 값을 사용했는데 오류가 발생했습니다 : '치명적 : 참조는 나무가 아닙니다 : '? – ElpieKay

+0

죄송합니다, 아마 내 질문에 분명하지 않습니다. 이 커밋은 원격 저장소 (bitbucket)에 있지만 지점 (지점 자체가 제거됨)에 연결되지 않습니다. – Yury