草庐IT

git - 复杂的 Git 分支名称破坏了所有 Git 命令

coder 2023-06-22 原文

我试图使用以下命令从 master 创建一个分支,

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

当 Git 突然停止响应时。我怀疑未转义的 () 是罪魁祸首。现在,每当我尝试运行任何 Git 命令时,我都会收到相同的错误:

git:176: command not found: _of_ProductSearchQuery

每次我输入命令时,git 后面的数字都会增加。

谁能解释一下发生了什么?我该如何恢复正常?我想删除那个分支,但我该怎么做呢?

最佳答案

问题

Can anyone explain what happened? [...] I'd love to be able to delete that branch, but Git won't work for me.

通过运行

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

在 zsh 中,您没有创建任何分支。相反,您不小心定义了三个 shell 函数,分别称为 gitbranchSSLOC-201_Implement___str__,它们忽略了它们参数(如果有),其正文是 _of_ProductSearchQuery。您可以通过调用名为 functions 的内置 zsh 命令来检查自己是否确实发生了这种情况,该命令列出了所有现有的 shell 函数:

$ functions                                                     
SSLOC-201_Implement___str__ () {
    _of_ProductSearchQuery
}
branch () {
    _of_ProductSearchQuery
}
git () {
    _of_ProductSearchQuery
}

不幸的是,虽然其他两个 shell 函数没有问题,名为“git”的 shell 函数现在 stash 了 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 loggit status 等(当然,假设不存在名为 _of_ProductSearchQuery 的命令)。

旁注

[...] I get the same error:

git:176: command not found: _of_ProductSearchQuery

(with the number after git increasing every time I type a command)

该数字仅对应于 HISTCMD 的值,这是一个包含

的环境变量

[t]he current history event number in an interactive shell, in other words the event number for the command that caused $HISTCMD to be read.

参见 zsh manual了解更多详情。

解决方案

And how do I get back to normal?

只需删除有问题的 shell 函数(以及您在创建时不小心创建的另外两个函数):

unset -f git
unset -f branch SSLOC-201_Implement___str__

那么一切都应该没问题。

如果 unset 也被 stash 了怎么办?!

Good question !我推荐你Wumpus W. Wumbley's excellent comment下面。


分支命名技巧

避免任何特殊的 shell 字符

是的,正如评论中所指出的,括号是 Git 分支名称中的有效字符;您只需要适本地引用名称,例如

$ git branch 'foo()bar'
$ git branch
  foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'

但是,当用作命令行参数时每次 都需要引用此类名称,这应该说服您避免在引用名称中使用括号。更一般地说,您应该(尽可能)避免在 shell 中具有特殊含义的字符,以防止出现像这样的意外情况。

使用简单的分支名称

无论如何,您应该让您的分支名称简短而甜美。长描述如

SSLOC-201_Implement___str__()_of_ProductSearchQuery

属于提交消息,而不属于分支名称。

关于git - 复杂的 Git 分支名称破坏了所有 Git 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32355540/

有关git - 复杂的 Git 分支名称破坏了所有 Git 命令的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  4. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  5. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  6. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  7. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  8. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  9. ruby-on-rails - 应用程序的名称是否可以作为变量使用? - 2

    当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve

  10. ruby-on-rails - 如何从过时的 TZInfo 标识符中获取 Rails TimeZone 名称? - 2

    已经有一个问题回答了如何将“America/Los_Angeles”转换为“PacificTime(US&Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为RailsTimeZone。我无法在图书馆中找到任何可以帮助我完成此任务的东西。 最佳答案 来自RailsActiveSupport::TimeZonedocs:TheversionofTZInfobundledwithActiveSupportonlyincludesthedefinitionsnecessarytosupportthezonesdefinedb

随机推荐