commit does not belong to any branch

# 잘못된 email 주소가 있어 수정하기 위해 아래 포스팅한 rebase 스크립트를 실행했다.
# rebase 후 tag 를 푸시하지 않았고 no branch(브랜치가 없는) 커밋으로 남게 됐다.
# git log 에는 보이지 않지만 tig cli 툴로 보면 최초 커밋 이전에 수정전 커밋이 no-branch 상태로 추가되어 보인다.

# tig 에서 봤을때 tag 커밋은 no branch 상태로 email 도 수정되지 않은 상태였다.
# 깃헙에서 no-branch 커밋을 보면 다음과 같은 메시지가 나온다.
https://github.com/xxxx/commit/{커밋해시} 
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

# 또 다음 명령으로 커밋이 포함된 브랜치를 찾아도 결과가 없다.
git branch --contain {커밋해시}

# 문제는 tig 로 보면 no-branch 커밋들이 최초 커밋 이전에 중복되어 보인다는 것이다.

# [해결방법]
# 다시 위 포스팅의 rebase 스크립트(이름,email 값 변경해서)를 실행했다.
# mater, develop 강제 푸시해도 변경사항이 없다고 나왔지만, tag 는 강제 푸시가 됐다.
git push --tags -f

# tig 에서 다시 확인해보니 email 수정된 tag 커밋이 제대로 반영됐다.(해결!)

# [로컬 refs 제거방법]
# 추가로 no branch (tag) 커밋들은 다음과 refs/.. 로만 표시된다.
refs/original/refs/tags/1.0.0
refs/original/refs/tags/1.0.1

# refs 는 로컬에 남아 있는 참조 정보라 지워도 된다.
# refs 지우기
# 방법1
# 다음과 같이 일일히 삭제하면 된다.
git update-ref -d refs/original/refs/tags/1.0.0
git update-ref -d refs/original/refs/tags/1.0.1

# 방법2
# 아래 경로의 파일들을 삭제해도 된다. 하지만 .git 내용을 직접 수정하는거 권장되지 않는다.
rm -rf .git/refs/original

# 방법3
# 삭제해야할 refs 가 많다면 이미 remote(origin) 에는 푸시됐으니 로컬에서 새로 클론 받자.
git clone http://{저장소}

# 참고로 이제 tig 에선 no branch 상태의 커밋들이 보이진 않지만
# https://github.com/xxxx/commit/{커밋해시} 에는 여전히 no branch 커밋들을 확인할 수 있다.
# rebase 가 수정된 새로운 커밋을 생성하는거고 이전의 no branch 커밋들은 유효하지 않은 상태로 github 저장소에 계속 남아 있는 것으로 보인다.
# 이 부분은 제거가 안돼서 저장소를 새로 만들어야 하는것 같다.

comments:

댓글 쓰기