複雑な Git ブランチ名によりすべての Git コマンドが機能しなくなりました 質問する

複雑な Git ブランチ名によりすべての Git コマンドが機能しなくなりました 質問する

master次のコマンドでブランチを作成しようとしました。

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

Git が突然応答しなくなったとき。()どうやらエスケープされていないことが原因のようです。今では、Git コマンドを実行しようとすると、同じエラーが発生します。

git:176: command not found: _of_ProductSearchQuery

gitコマンドを入力するたびに数字が増えていきます。

何が起こったのか説明してくれる人はいますか? また、どうすれば正常に戻りますか? そのブランチを削除したいのですが、どうすればよいですか?

ベストアンサー1

問題

何が起こったのか説明してくれる人はいますか? [...] そのブランチを削除したいのですが、Git が機能しません。

実行することで

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

zsh では、ブランチ を作成しませんでした。代わりに、、、という3 つのシェル関数gitを誤って定義しました。これらの関数branchSSLOC-201_Implement___str__、パラメータ (存在する場合) を無視し、その本体は です。組み込みの zsh コマンド を呼び出して、既存のシェル関数をすべて一覧表示する_of_ProductSearchQueryことで、これが実際に起こったことを自分で確認できます。functions

$ 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 loggit statusなど) を実行しようとするたびに (もちろん、 というコマンドが_of_ProductSearchQuery存在しないことを前提としています)。

サイドノート

[...] 同じエラーが発生します:

git:176: command not found: _of_ProductSearchQuery

git(コマンドを入力するたびに数字が増えていきます)

HISTCMDその数字は、単に環境変数の値に対応しており、

対話型シェルの現在の履歴イベント番号、つまり、$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

ブランチ名ではなく、コミット メッセージに属します。

おすすめ記事