2015-02-24 21 views
2

我做了5个提交,其中我引用了一些变量FooObj。然后我意识到FooObj是错误的选择,并创建BarObj。现在我想提交一个提交,它将字符串FooObj的所有实例替换为BarObj,仅在这5个提交中添加的行中。如何搜索并替换最后一次X提交中添加的行中的字符串?

我不能做一个搜索&取代整个代码库,因为FooObj仍然在许多地方正确使用;它必须被本地化为那5个提交。

我可以做到这一点手动取代,但有没有一种自动化的方式?

回答

3

您可以通过git diff --name-only HEAD~5获取最近5次提交中的文件列表。然后,您可以将其转换为sed命令,以便用xargs替换您的变量名称。

所以整个命令最终会寻找一些这样的:

git diff --name-only HEAD~5 | xargs sed -i 's/FooObj/BarObj/g' 

这将导致在正确的文件你正在更新。验证更改是否正确,并且可以照常提交。

编辑

既然你只想线在你提交更改的方法不会是相当自动化,但你可以创建一个补丁修复线,并将其应用应导致的变化你要的那个。

http://www.thegeekstuff.com/2014/03/git-patch-create-and-apply/

您可以创建一个补丁文件,并通过应用它:

git diff HEAD~5 HEAD >> BarObjPatch.diff 
//Edit the patch file to correct the changes. 
//As noted in the comments, be careful as this will modify context lines 
sed -i 's/FooObj/BarObj/g' BarObjPatch.diff //Can also edit file manually 
git apply BarObjPatch.diff 

这将导致你想要的改变。

+0

感谢您试图回答我的问题,但我需要将搜索和替换本地化为在这5个提交中添加的行 - 而不是整个文件 - 因为在那些文件中存在很多“FooObj”总是在那里(并保持不变)。 – DBedrenko 2015-02-24 14:29:30

+0

对不起,在阅读问题时,更新了应该导致所需更改的答案。 – Schleis 2015-02-24 15:02:51

+0

但是不会''sed'命令也执行替换上下文行和删除行(行中以“ - ”开头的行)?我可以让'sed'搜索表达式只匹配以“+”开始的行,但随后的提交将在上下文中有我在前面的提交中插入的​​行。我想有没有一种自动化的方式来做到这一点... – DBedrenko 2015-02-24 15:12:45

相关问题