Git通过grep / regex添加行索引

问题描述 投票:15回答:3

我有一个巨大的补丁,我想打破多个逻辑git提交。大量的更改只是更改变量名称或函数调用,以便可以使用grep轻松定位它们。如果我可以向索引添加任何与正则表达式相匹配的更改然后在git gui中清理,它将为我节省大量的手动工作。是否有一种很好的方法可以使用git中的正则表达式或grep的某些输出(例如行号)逐行更新索引?

我找到了a similar question,但我不确定如何从正则表达式搜索构建临时文件。

regex git git-add
3个回答
17
投票

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以避免得到无关的变化。您可能希望调整此值以适应您的情况。


1
投票

更简单地说,你可以使用git add -p并利用/选项在你的差异中搜索要添加的补丁。它不是完全自动化的,但它比我发现的其他替代方案更容易。


-1
投票

xargs是你要找的。试试这个:

grep -irl 'regex_term_to_find' * | xargs -I FILE git add FILE

管道|是用于搜索所有文件*的标准grep命令。选项包括:

  • i - 不区分大小写
  • r - 通过目录递归
  • l - 仅列出文件名

在语句的xargs部分中,FILE是用于grep命令传递的每个参数/匹配的变量的名称。然后在适当的位置使用变量输入所需的命令。

© www.soinside.com 2019 - 2024. All rights reserved.