我有一个巨大的补丁,我想打破多个逻辑git提交。大量的更改只是更改变量名称或函数调用,以便可以使用grep轻松定位它们。如果我可以向索引添加任何与正则表达式相匹配的更改然后在git gui中清理,它将为我节省大量的手动工作。是否有一种很好的方法可以使用git中的正则表达式或grep的某些输出(例如行号)逐行更新索引?
我找到了a similar question,但我不确定如何从正则表达式搜索构建临时文件。
patchutils有一个命令grepdiff
,可用于实现这一目标。
# check that the regex search correctly matches the changes you want.
git diff -U0 | grepdiff 'regex search' --output-matching=hunk
# then apply the changes to the index
git diff -U0 | grepdiff 'regex search' --output-matching=hunk | git apply --cached --unidiff-zero
我在差异上使用-U0
以避免得到无关的变化。您可能希望调整此值以适应您的情况。
更简单地说,你可以使用git add -p
并利用/
选项在你的差异中搜索要添加的补丁。它不是完全自动化的,但它比我发现的其他替代方案更容易。
xargs是你要找的。试试这个:
grep -irl 'regex_term_to_find' * | xargs -I FILE git add FILE
管道|
是用于搜索所有文件*
的标准grep命令。选项包括:
i
- 不区分大小写r
- 通过目录递归l
- 仅列出文件名在语句的xargs
部分中,FILE
是用于grep命令传递的每个参数/匹配的变量的名称。然后在适当的位置使用变量输入所需的命令。