Vấn đề
Bất cứ ai có thể giải thích những gì đã xảy ra? [...] Tôi rất muốn có thể xóa chi nhánh đó, nhưng Git sẽ không làm việc cho tôi.
Bằng cách chạy
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
trong zsh, bạn đã không tạo bất kỳ chi nhánh . Thay vào đó, bạn vô tình định nghĩa ba chức năng vỏ , được gọi là git
, branch
và SSLOC-201_Implement___str__
, mà bỏ qua các thông số của họ (nếu có) và có cơ thể là _of_ProductSearchQuery
. Bạn có thể tự kiểm tra xem đây có thực sự là điều đã xảy ra hay không, bằng cách gọi lệnh zsh dựng sẵn được gọi functions
, liệt kê tất cả các hàm shell hiện có:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
Thật không may, mặc dù hai hàm shell khác không có vấn đề, nhưng hàm shell có tên "git" hiện che mờ lệnh 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)
Do đó, sau đó bạn sẽ nhận được lỗi
command not found: _of_ProductSearchQuery
bất cứ khi nào bạn cố gắng để chạy một lệnh Git, ví dụ như git log
, git status
vv (giả sử, tất nhiên, điều đó không có lệnh gọi _of_ProductSearchQuery
tồn tại).
Lưu ý bên
[...] Tôi nhận được lỗi tương tự:
git:176: command not found: _of_ProductSearchQuery
(với số sau khi git
tăng mỗi lần tôi gõ lệnh)
Con số đó đơn giản tương ứng với giá trị của HISTCMD
, một biến môi trường chứa
[t] anh ta số sự kiện lịch sử hiện tại trong một vỏ tương tác, nói cách khác, số sự kiện cho lệnh gây ra $HISTCMD
được đọc.
Xem hướng dẫn sử dụng zsh để biết thêm chi tiết.
Giải pháp
Và làm thế nào để tôi trở lại bình thường?
Đơn giản chỉ cần xóa chức năng shell có vấn đề (và hai cái khác bạn tạo ra một cách tình cờ, trong khi bạn đang ở đó):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Sau đó mọi thứ sẽ ổn thôi.
Điều gì nếu unset
bị che khuất?!
Câu hỏi hay ! Tôi giới thiệu bạn đến bình luận tuyệt vời của Wumpus W. Wumbley bên dưới.
Mẹo đặt tên chi nhánh
Tránh bất kỳ ký tự vỏ đặc biệt
Có, như đã chỉ ra trong các nhận xét, dấu ngoặc đơn là các ký tự hợp lệ trong tên nhánh Git; bạn chỉ cần trích dẫn tên một cách thích hợp, vd
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Tuy nhiên, nhu cầu trích dẫn các tên như vậy mỗi lần khi được sử dụng làm đối số dòng lệnh sẽ thuyết phục bạn tránh dấu ngoặc đơn trong tên tham chiếu. Tổng quát hơn, bạn nên (càng nhiều càng tốt) tránh các nhân vật có ý nghĩa đặc biệt trong vỏ sò, để ngăn chặn những điều bất ngờ như thế này.
Sử dụng tên chi nhánh đơn giản
Bạn nên giữ tên chi nhánh của bạn ngắn và ngọt ngào. Mô tả dài như
SSLOC-201_Thực hiện ___ str __ () _ of_ ProducttSearchQuery
thuộc về thông điệp cam kết, không phải trong tên chi nhánh.