假设我想要检出一组 Git 文件,例如app/*^(.tmpl).html
,
如何将这个正则表达式放入git checkout branch -- (regex)
中?
如在“是否有办法在git checkout
中使用通配符?”中提到:
Git无法处理通配符,但您的shell可以。
如下所述,您需要转义通配符字符,以便git进行解释:afile\*
,或使用简单引号。
git checkout
示例部分展示了通配符的用法:
rm hello.c
git checkout -- '*.c'
注意
*.c
周围的引号。
即使hello.c
文件已不在工作树中,由于文件通配符用于匹配索引中的条目(而非shell中的工作树),它也会被检出。
另一种选择是使用find命令(例如,““git add *.js
”未添加子目录中的文件”)。
find . -name '*js' -exec git checkout {} \;
您可以尝试使用 find -regex
进行正则表达式匹配。find ./packages/* -maxdepth 1 -name 'package.json' \
-exec git checkout {} \;
为了只检出我拥有的每个项目的package.json
文件,并省略dist
或nodemodules
子文件夹,更现代的命令(自2014年以来)是Git 2.23+(Q3 2019)的git restore
。git restore -s=aBranch -- '*.c'
使用符合pathspec
描述的通配符模式'*.c'。
find
命令是什么,包括 -maxdepth
参数? - VonC我更新了这个答案,但我能够使用通配符进行git checkout
,因此我相信现在这是可能的。 我正在运行git版本1.9.3。
git checkout foo\*
。转义后的命令不改变原意,但更加易于理解。 - Jamie Schembri我正在使用以下命令组合。
如果您需要远程分支:
git checkout $(git branch -a | grep "your-key-words-here" | grep remotes)
如果您只需要本地分支:
git checkout $(git branch | grep "your-key-words-here")
用法示例
主要开发人员按照来自JIRA或其他地方的任务编号对分支进行命名,因此使用这些命令,您可以更快地切换到所需的分支。
(1) 所有可用的本地分支:
要切换到feature/CAN2-1035_new_calculation_for_internal_transfer
分支,您应输入以下命令:
git checkout $(git branch | grep CAN2-1035)
git branch
- 将返回所有本地分支 (1)grep CAN2-1035
- 将过滤(1)的结果,并仅返回包含CAN2-1035的结果这些命令也可以提取到某个Bash命令中,以简化使用。
find --regex
吗? - VonC