Masalah
Adakah yang bisa menjelaskan apa yang terjadi? [...] Saya ingin menghapus cabang itu, tetapi Git tidak akan berfungsi untuk saya.
Dengan berlari
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
di zsh, Anda tidak membuat cabang apa pun . Sebaliknya, Anda secara tidak sengaja ditetapkan tiga fungsi shell , yang disebut git
, branch
dan SSLOC-201_Implement___str__
, yang mengabaikan parameter mereka (jika ada) dan yang tubuhnya _of_ProductSearchQuery
. Anda dapat memeriksa sendiri bahwa ini memang yang terjadi, dengan menjalankan perintah builtin zsh yang disebut functions
, yang mencantumkan semua fungsi shell yang ada:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
Sayangnya, meskipun dua fungsi shell lainnya tidak bermasalah, fungsi shell yang disebut "git" sekarang membayangi perintah bonafide 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)
Karena itu, Anda selanjutnya akan mendapatkan kesalahan
command not found: _of_ProductSearchQuery
setiap kali Anda mencoba menjalankan perintah Git, mis git log
. git status
, dll. (dengan asumsi, tentu saja, tidak ada perintah yang dipanggil _of_ProductSearchQuery
ada).
Catatan samping
[...] Saya mendapatkan kesalahan yang sama:
git:176: command not found: _of_ProductSearchQuery
(dengan angka setelah git
bertambah setiap kali saya mengetikkan perintah)
Angka itu hanya sesuai dengan nilai HISTCMD
, variabel lingkungan yang berlaku
[t] ia nomor peristiwa sejarah saat ini di shell interaktif, dengan kata lain nomor acara untuk perintah yang menyebabkan $HISTCMD
untuk dibaca.
Lihat manual zsh untuk detail lebih lanjut.
Larutan
Dan bagaimana cara saya kembali normal?
Hapus saja fungsi shell yang bermasalah (dan dua lainnya yang Anda buat secara tidak sengaja, saat Anda melakukannya):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Maka semuanya harus baik-baik saja.
Bagaimana jika unset
dibayangi juga ?!
Pertanyaan bagus ! Saya merujuk Anda pada komentar luar biasa Wumpus W. Wumbley di bawah ini.
Kiat penamaan cabang
Hindari karakter shell khusus
Ya, sebagaimana ditunjukkan dalam komentar, tanda kurung adalah karakter yang valid dalam nama cabang Git; Anda hanya perlu mengutip namanya secara tepat, mis
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Namun, kebutuhan untuk mengutip nama-nama tersebut setiap kali ketika digunakan sebagai argumen baris perintah harus meyakinkan Anda untuk menghindari tanda kurung dalam nama referensi. Secara umum, Anda harus (sebanyak mungkin) menghindari karakter yang memiliki arti khusus dalam shell, untuk mencegah kejutan seperti ini.
Gunakan nama cabang sederhana
Anda tetap harus menjaga nama cabang Anda pendek dan manis. Seperti deskripsi panjang
SSLOC-201_Implement ___ str __ () _ of_ProductSearchQuery
termasuk dalam pesan komit, bukan dalam nama cabang.