Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.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
Git 如何在不使用鼠标的情况下快速签出具有较大名称的分支?_Git - Fatal编程技术网

Git 如何在不使用鼠标的情况下快速签出具有较大名称的分支?

Git 如何在不使用鼠标的情况下快速签出具有较大名称的分支?,git,Git,很简单。想象一下这个场景: [user@home repo]$ git branch * branch-im-currently-working-on long-branch-name-i-want-to-checkout-without-using-my-mouse long-branch-name-i-dont-want-to-checkout .. more-branches-with-similar-names [user@home repo]$ git checkout

很简单。想象一下这个场景:

[user@home repo]$ git branch

* branch-im-currently-working-on
  long-branch-name-i-want-to-checkout-without-using-my-mouse
  long-branch-name-i-dont-want-to-checkout
  .. more-branches-with-similar-names
[user@home repo]$ git checkout now-i-have-to-type-a-lot-or-use-the-mouse
有办法吗?一个简洁的解决方案是,如果我能按数字结账,比如
git checkout 1
来结账列表中的第一个

我可以使用
tab
但是如果我有20个分支都有相似的名字,我最终不得不像疯子一样进行tab,结果比仅仅拿起鼠标要慢,这是一种痛苦

编辑:我发现这个问题不是特别流行,所以我将尝试使用更短的分支名称别名/使用更少的本地分支来解决它

与“键入”任何长命令或选项的方式相同。为您的shell安装选项卡完成。Git具有出色的选项卡完成支持


您还可以使用
git checkout-
在两个分支之间快速切换,这将签出上次签出之前您所在的上一个分支。

如果您在Emacs中,您可以使用meta-/或meta-p,并且通常会使用最近使用的自动完成来自动完成。

如果您使用的是tmux,您可以使用如下脚本:

sed -n "${1}p" | expand | while read line; do
        echo "$line" | tr -d \\n | tmux loadb -
done
然后通过该脚本运行
git branch
,将分支名称剪切到粘贴缓冲区中。例如,如果上面的行位于名为
tb
的脚本(或bash函数)中,则只需执行以下操作:

git branch | tb 3
要选择git branch输出的第3行,或匹配分支名称中的正则表达式,请执行以下操作:

git branch | tb /dont/
要匹配包含文本的分支,请执行以下操作:
dont
。然后,您只需将文本从粘贴缓冲区中拉出(默认的键序列为
^b]


如果您没有使用
tmux
,我深表哀悼。但是,您可能只需要通过
pbcopy
(只需将脚本中对
tmux loadb
的调用替换为
pbcopy
,主要是为了删除粘贴缓冲区中令人恼火的换行符),就可以摆脱git分支

将此别名添加到git配置中,它将搜索并签出simular分支:

> git config --global alias.fb '!sh -c \"git branch -a | grep -v remotes | grep $1 | head -n 1 | xargs git checkout\"'
我的分行名单:

> git branch
  18-notification-topic
* develop
别名的使用:

> git fb 18
Switched to branch '18-notification-topic'
Your branch is up to date with 'origin/18-notification-topic'.

请参阅更新。制表并没有多大帮助,至少在这种情况下它没有使用鼠标那么快。@Jason打字更好了吗?没有任何一种神奇的方法不涉及键盘或鼠标。@meagar:“这不涉及键盘或鼠标”——“好的,Git,签出到long-branch-name-i-want-to-checkout-without-without-my-mouse”没有什么比你想要的更像(
Git checkout 1
)因为没有人需要它,键入
git branch
,扫描列表并查找您已经知道其名称的分支的数字别名并不是一个很好的工作流。使用制表符完成。这是一个已解决的问题。如果您了解了制表符的完成情况,那么这项技能几乎会影响到其他所有命令。如果你发现你必须经常点击tab,那么就更好地命名你的分支。@meagar我感谢你的回答,但我已经在问题中明确指出,tab完成比使用鼠标慢。我不知道怎样才能使这个问题更简洁。我想要一个比使用鼠标更快,而不是更慢的解决方案。我的观点是它不慢。是你使用它的速度较慢。答案是更好地使用公认的解决方案,而不是立即拒绝它。@meagar,你要么错了,要么你没有解释为什么会这样。假设您有10个分支,名称为
some/branch/one/two
some/other/branch/one/two
some/branch/two/one
,等等。如果您有足够的分支,则需要键入一个字母并按tab键最多5次。如果这比抓起鼠标快,那么你需要学会更快地抓起鼠标……我的评论的最后一部分很好地涵盖了这一点:更好地命名你的分支。你基本上是在反对制表符完成,因为你可以创造一个最坏的情况,你永远不会在实践中遇到。我目前的回购协议有218家分支机构。我很少会不止一次地按tab键。