2015-02-24 19 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

相關問題