Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shurtcut git分支签出_Git - Fatal编程技术网

shurtcut git分支签出

shurtcut git分支签出,git,Git,我有一个包含许多分支的存储库 b1长名称,b2长名称,b3长名称 我希望能够在分支之间快速切换。我还想在切换分支之前运行其他git命令 我试图用bash脚本实现这一点,下面是我的自定义脚本gitSwitch.sh #!/bin/sh set -e git reset #<-- additional command git checkout -f b2-long-name #/垃圾箱/垃圾箱 set-e git重置#将签出b1长名称 gitb2开关->将签出b2长名称 等等 有什么好办

我有一个包含许多分支的存储库
b1长名称
b2长名称
b3长名称

我希望能够在分支之间快速切换。我还想在切换分支之前运行其他git命令

我试图用bash脚本实现这一点,下面是我的自定义脚本
gitSwitch.sh

#!/bin/sh

set -e

git reset #<-- additional command
git checkout -f b2-long-name
#/垃圾箱/垃圾箱
set-e
git重置#将签出
b1长名称

gitb2开关
->将签出
b2长名称

等等

有什么好办法吗?

你可以使用

就你而言:

readarray -d '' branches < <(git branch --list "*$1*")
len=${#branches[@]}
readarray-d''分支<
有没有什么好办法


对于初学者,请安装一个,这样您就可以键入类似于
git checkout b1
的内容,而不是完整的长名称。您还可以为常用命令创建一些较短的别名。

您可以创建一个将执行其他命令的git别名

#.git/config
[别名]
sw=!git重置和git签出$1&&:
为了避免键入长名称,您可以使用制表符补全

git sw b1<tab>
git软件b1
如果制表符完成不起作用,您可能需要先配置它。见下文:


只需将checkout命令更改为:
git checkout-f“$1-long-name”
您是否考虑过只为分支使用较短的名称?你在回购协议中所称的东西就是你在回购协议中所称的东西,任何本地分支机构都可以跟踪任何上游分支机构。@anubhava是的,但我必须在这样的格式中键入分支机构的全名case@jthill不幸的是,在这种特殊的情况下,他们应该走得更远。完成脚本很可能就是这种方式。但我自己从来都不满意他们中的任何一个,因为他们做出了我不同意的假设。幸运的是,新的
git restore
在这里可能会有所帮助,因为
git restore
不会在我指的是“文件名”时采用“分支”:-)谢谢您的回答,我还想编写一个附加命令的脚本,该命令实际上比每次
git签出之前执行的
git reset
要长得多
&&&:
用于抑制错误吗?首先,为什么要抑制错误?其次,它应该是
| |:
@phd没有
&&&:
,它就不能工作。如果没有它,参数(分支名称)将被解释为pathspec。@phd:不支持错误。例如,如果您给它一个不存在的分支名称,您将看到一条错误消息name@sreginogemoh试着键入
b1
,然后按
好,我明白了,那么您如何调用该脚本呢?@sreginogemoh
gitSwitch b1
例如:您将分支名称的任何部分作为参数传递,具体程度足以只选择一个分支(如果您找到多个分支,您的脚本应该会出错)