ปัญหา
ทุกคนสามารถอธิบายสิ่งที่เกิดขึ้นได้ไหม [... ] ฉันชอบที่จะสามารถลบสาขานั้นได้ แต่ Git จะไม่ทำงานสำหรับฉัน
โดยการวิ่ง
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
ใน zsh, คุณไม่ได้สร้างทุกสาขา แต่คุณไม่ได้ตั้งใจที่กำหนดไว้สามฟังก์ชั่นเปลือกที่เรียกว่าgit
, branch
และSSLOC-201_Implement___str__
ที่จะไม่แสดงพารามิเตอร์ของพวกเขา (ถ้ามี) _of_ProductSearchQuery
และผู้ที่ร่างกาย คุณสามารถตรวจสอบด้วยตัวคุณเองว่านี่เป็นสิ่งที่เกิดขึ้นจริงโดยการเรียกใช้คำสั่ง builtin zsh functions
ซึ่งจะแสดงรายการฟังก์ชันเชลล์ที่มีอยู่ทั้งหมด:
$ 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 เช่นgit log
, git status
ฯลฯ (สมมติว่าแน่นอนว่าคำสั่งไม่เรียกว่า_of_ProductSearchQuery
มีอยู่)
ข้อความด้านข้าง
[... ] ฉันได้รับข้อผิดพลาดเดียวกัน:
git:176: command not found: _of_ProductSearchQuery
(ด้วยจำนวนหลังจากgit
เพิ่มขึ้นทุกครั้งที่ฉันพิมพ์คำสั่ง)
ตัวเลขนั้นสอดคล้องกับค่าของHISTCMD
ตัวแปรสภาพแวดล้อมที่เก็บไว้
[t] เขาหมายเลขเหตุการณ์ประวัติปัจจุบันในเชลล์แบบโต้ตอบในคำอื่น ๆ หมายเลขเหตุการณ์สำหรับคำสั่งที่ทำให้เกิด$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
ไม่ได้อยู่ในชื่อสาขา