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

时间:2014-07-21 03:47:31

标签: 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 now-i-have-to-type-a-lot-or-use-the-mouse

有什么方法吗?一个简洁的解决方案是,如果我可以按号码结账,例如git checkout 1来结账列表中的第一个。

我可以使用tab,但是如果我有20个分支都有相似的名字,我最终必须像疯子一样选项卡,结果比拿起鼠标慢,这很痛苦。

编辑:我认为这个问题并不是特别受欢迎,所以我只是尝试使用较短的分支名称别名/较少的本地分支来解决它。

4 个答案:

答案 0 :(得分:4)

以同样的方式"键入" 任何长命令或选项。安装shell的选项卡完成。 Git具有出色的标签完成支持。

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

答案 1 :(得分:0)

如果您使用的是Emacs,则可以使用meta- / meta-p,并且它通常会使用最近使用的自动完成功能自动完成。

答案 2 :(得分:0)

如果您使用的是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简单地管理git-branch(只需用tmux loadb替换脚本中对pbcopy的调用,主要是为了删除令人恼火的换行符。在粘贴缓冲区中)。

答案 3 :(得分:0)

将此别名添加到您的git config中,它将搜索并签出类似分支:

> 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'.

more information on chris holts site.