복잡한 Git 브랜치 이름으로 모든 Git 명령이 중단됨 . git branch

master다음 명령 으로 지점을 만들려고했습니다 .

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

Git이 갑자기 응답을 멈췄을 때 나는 이스케이프되지 않은 사람들 ()이 어떻게 든 책임을 져야한다고 생각한다 . 이제 Git 명령을 실행할 때마다 동일한 오류가 발생합니다.

git:176: command not found: _of_ProductSearchQuery

git명령을 입력 할 때마다 숫자가 증가한 후

아무도 무슨 일이 있었는지 설명 할 수 있습니까? 그리고 어떻게 정상으로 돌아 갑니까? 해당 지점을 삭제하고 싶지만 어떻게 할 수 있습니까?



답변

문제

아무도 무슨 일이 있었는지 설명 할 수 있습니까? […] 해당 지점을 삭제할 수 있기를 원하지만 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

분기 이름이 아닌 커밋 메시지에 속합니다.