문제
아무도 무슨 일이 있었는지 설명 할 수 있습니까? [...] 해당 지점을 삭제할 수 있기를 원하지만 Git은 작동하지 않습니다.
실행하여
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
zsh에서는 분기를 작성하지 않았습니다 . 대신, 실수로 세 가지 정의 쉘 기능 이라고 git
, branch
그리고 SSLOC-201_Implement___str__
몸 자신의 매개 변수 (있는 경우)를 무시 _of_ProductSearchQuery
. functions
모든 기존 쉘 함수를 나열 하는 내장 zsh 명령을 호출하여 실제로 발생한 일인지 확인할 수 있습니다 .
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
불행히도, 다른 두 쉘 함수에는 문제가 없지만 "git"이라는 쉘 함수는 이제 bona fide git
명령을 어둡게합니다 !
$ which git
git () {
_of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)
따라서 나중에 오류가 발생합니다
command not found: _of_ProductSearchQuery
당신이 망할 놈의 명령을 실행하려고 할 때마다 예를 들어 git log
, git status
등 (가정, 물론,라는 어떤 명령은 _of_ProductSearchQuery
존재하지 않는다).
사이드 노트
[...] 같은 오류가 발생합니다.
git:176: command not found: _of_ProductSearchQuery
( git
명령을 입력 할 때마다 숫자가 증가한 후 )
이 숫자는 단순히 HISTCMD
환경 변수 인의 값에 해당합니다.
대화식 쉘의 현재 히스토리 이벤트 번호, 즉 명령을 $HISTCMD
읽은 명령의 이벤트 번호 .
자세한 내용은 zsh 매뉴얼 을 참조하십시오.
해결책
그리고 어떻게 정상으로 돌아 갑니까?
문제가있는 쉘 기능과 실수로 생성 한 다른 기능을 삭제하면됩니다.
unset -f git
unset -f branch SSLOC-201_Implement___str__
그렇다면 모든 것이 잘되어야합니다.
unset
그림자도 있다면 어떨까요 ?!
좋은 질문입니다 ! 나는 당신을 참조 wumpus 사 W. Wumbley의 우수한 주석 아래.
지점 이름 지정 팁
특별한 쉘 문자를 피하십시오
주석에서 지적했듯이 괄호는 Git 브랜치 이름에 유효한 문자입니다. 이름을 적절하게 인용하면됩니다. 예 :
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
그러나 명령 행 인수로 사용될 때 마다 이러한 이름을 인용 할 필요가 있으면 참조 이름에서 괄호를 피해야합니다. 보다 일반적으로, 쉘에서 특별한 의미를 갖는 문자는 피해야합니다.
간단한 분기 이름 사용
어쨌든 지점 이름은 짧고 달콤해야합니다. 같은 긴 설명
SSLOC-201_Implement ___ str __ () _ of_ProductSearchQuery
분기 이름이 아닌 커밋 메시지에 속합니다.