我有一個巨大的補丁,我想分解成多個邏輯git提交。大量的變化只是簡單地改變變量名稱或函數調用,使得它們可以很容易地用grep定位。如果我可以在索引中添加任何與正則表達式匹配的更改,然後在git gui中進行清理,那麼將爲我節省大量的手動工作。使用git中的正則表達式或某些grep輸出(例如行號),是否有一種逐行更新索引的好方法?Git通過grep/regex添加行索引
我發現a similar question,但我不知道如何從正則表達式類型的搜索構建臨時文件。
我有一個巨大的補丁,我想分解成多個邏輯git提交。大量的變化只是簡單地改變變量名稱或函數調用,使得它們可以很容易地用grep定位。如果我可以在索引中添加任何與正則表達式匹配的更改,然後在git gui中進行清理,那麼將爲我節省大量的手動工作。使用git中的正則表達式或某些grep輸出(例如行號),是否有一種逐行更新索引的好方法?Git通過grep/regex添加行索引
我發現a similar question,但我不知道如何從正則表達式類型的搜索構建臨時文件。
xargs是你在找什麼。試試這個:
grep -irl 'regex_term_to_find' * | xargs -I FILE git add FILE
截至管|
是搜索所有的文件*
您的標準grep命令。選項包括:
i
- 不區分大小寫r
- 遞歸通過目錄l
- 文件列表名稱僅在聲明FILE
的xargs
部分是名變量用於grep命令傳遞的每個參數/匹配。然後在適當的地方使用變量輸入所需的命令。
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
以避免發生不相關的變化。您可能需要調整此值以適應您的情況。
這對我來說效果不錯,但是,作爲一個說明,如果修改了與正則表達式不匹配的相鄰行,「hunk」並不能提供足夠的粒度。 – arcyqwerty 2014-11-23 23:04:05
我發現一個好方法就是運行第二行然後檢查結果。 'git status -v'用於上演的東西和'git diff'來查看所有沒有上演的東西。然後提交如果所有看起來正確。 – Gerry 2017-08-22 01:45:58
更簡單地說,您可以使用git add -p
並利用/
選項搜索您的差異以找到要添加的修補程序。它不是完全自動化的,但比我找到的其他替代品更容易。
一些例子可能會在闡明你想要達到的目標方面發揮很大的作用。 – rvalvik 2013-03-05 22:09:19