我正在尝试将几个提交(在提交消息中包含特定票号1234的提交)导出到修补文件。
编辑工作脚本位于https://github.com/amenk/SelfScripts/blob/master/git-extract-patches
这就是我所拥有的
#!/bin/bash -x
commits=`git log --pretty=oneline | grep "#1234" | cut -f1 -d" "`
no=1;
for COMMIT in $commits
do
git format-patch -1 $COMMIT --start-number=$no
no=$(($no+1))
done
但由于某种原因,执行git format-patch失败了:
$ ./getpatches.sh
++ git log --pretty=oneline
++ grep '#6809'
++ cut -f1 '-d '
+ commits='da591d66f05513488ee06857edc9d24a046c179d
4fd781da9cc503b961f8e4c42bbb136d9e3c1806
3a9311f5507f91f830b44673c57f672e7aabaac0'
+ no=1
+ for COMMIT in '$commits'
+ git format-patch -1 'da591d66f05513488ee06857edc9d24a046c179d' --start-number=1
fatal: ambiguous argument 'da591d66f05513488ee06857edc9d24a046c179d': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
当我手动拨打git format-patch -1 'da591d66f05513488ee06857edc9d24a046c179d' --start-number=1
时,一切都很好。
编辑:
我认为它与引号有关。如果我在循环中添加git log | grep $COMMIT
,我会收到以下错误:
+ grep '992ab41d3539539bd609209beed33a9de2f4277a'
grep: Unmatched [ or [^
另一个相互影响的结果是,如果我在for循环中硬编码grep '992ab41d3539539bd609209beed33a9de2f4277a'
,则命令输出(因为-x
的{{1}}选项没有引号而且有效。
bash
这些引用来自何处以及如何摆脱它们?
答案 0 :(得分:4)
我的git隐含地使用--color
选项,因此$COMMIT
字符串包含一些颜色代码。所以这搞砸了解析。有趣的是,颜色也包含在我的错误消息中。
但是你没有在终端中看到这个(它只是色彩斑斓),而且在粘贴到堆栈溢出后也没有。
解决方案是:
commits=`git log --no-color --pretty=oneline | grep "#1234" | cut -f1 -d" "`
答案 1 :(得分:1)
有一种更简单的获取提交列表的方法:
git log --format=%H --grep "CAT-300"