bash/git中分支和文件完成之间的冲突

bash/git中分支和文件完成之间的冲突,git,bash,tab-completion,bash-completion,Git,Bash,Tab Completion,Bash Completion,我正在使用git的bash完成脚本。但是,在某些情况下,它不起作用。假设我有一个分支foo branch和一个文件foo file。如果我想丢弃文件中的更改,我通常会执行以下操作: git checkout fo<tab> git签出fo 这将立即完成到foo分支。通常,如果有多个完成选项,我会收到一个铃声,另一个选项卡会显示这些选项。在这种情况下,有没有办法让完工也像这样工作?还是git完成总是优先于文件名完成 编辑:我浏览了bash手册页,找到了-o plusdirs,我将其

我正在使用git的bash完成脚本。但是,在某些情况下,它不起作用。假设我有一个分支foo branch和一个文件foo file。如果我想丢弃文件中的更改,我通常会执行以下操作:

git checkout fo<tab>
git签出fo
这将立即完成到foo分支。通常,如果有多个完成选项,我会收到一个铃声,另一个选项卡会显示这些选项。在这种情况下,有没有办法让完工也像这样工作?还是git完成总是优先于文件名完成


编辑:我浏览了bash手册页,找到了
-o plusdirs
,我将其添加到
complete
指令中。这是有效的;我将不得不尝试一段时间,看看它是否不会导致不带文件名参数的命令出现问题。

要将文件名完成和引用完成分开,请添加--作为分隔符:

git checkout foo -- file.c


.

这可能看起来很简单,但我避免了类似的问题,因为我不使用冲突的分支名称。

谢谢,这很有效。但是,如果我不必记得添加分隔符,那就更好了,因为我会一直忘记它,并再次完成分支。作为一个人,你应该能够适应一种情况:-)。OTOH、GIT和GIT bash completion都是GPL,所以如果可以的话可以对它们进行修改。无耻的插件:我编写了GIT编号,这样我就不必再为GIT参数编写文件名了:
git checkout -- file.c