問題
誰が何が起こったのか説明できますか?[...]そのブランチを削除できるようにしたいのですが、Gitが機能しません。
実行することにより
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
zshでは、ブランチを作成していません。代わりに、誤って3つの定義されたシェル関数と呼ばれる、git
、branch
、そしてSSLOC-201_Implement___str__
体であるそれらのパラメータ(もしあれば)とを無視し、_of_ProductSearchQuery
。これが実際に起こったことであることを確認するにはfunctions
、と呼ばれる組み込みのzshコマンドを呼び出します。これにより、既存のすべてのシェル関数が一覧表示されます。
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
残念ながら、他の2つのシェル関数は問題ありませんが、「git」と呼ばれるシェル関数は、真の 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のコマンドを実行しようとするたびにgit log
、git status
(何のコマンドが呼び出されないことを、もちろん、と仮定すると、など_of_ProductSearchQuery
が存在します)。
サイドノート
[...]同じエラーが発生します:
git:176: command not found: _of_ProductSearchQuery
(git
コマンドを入力するたびに数字が増えていく)
その数は単にHISTCMD
、を保持する環境変数の値に対応します。
[t]インタラクティブシェルの現在の履歴イベント番号、つまり、$HISTCMD
読み取られたコマンドのイベント番号。
詳細については、zshのマニュアルを参照してください。
解決
そして、どうすれば通常に戻すことができますか?
問題のあるシェル関数(および、作業中に誤って作成した他の2つ)を削除するだけです。
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
ブランチ名ではなくコミットメッセージに属します。