對于個人專案,我從代碼更改開始,然后意識到我需要更復雜的東西,所以我沒有提交它們并做了其他事情。
兩個小時后,我有了一個徹底改變的想法。在這種情況下,它在 Inform 7 中用“fungible”替換了“touchable”這個詞,以加快速度。所以我很快做出了改變,沒有隱藏當前的代碼。(是的,這是一個程序中的錯誤。但它會再次發生。)
問題是,一個檔案中有 250 個塊的文本被更改,只有一兩個塊與我開始處理的更改相關。我想在沒有 2 的情況下提交 250。
git add --patch story.ni一旦我跟蹤行號(9100 到 9200)并用于驗證關鍵扇區之前的更改,這并不痛苦。我y快速打字,直到我到達第 8800 行。然后我放慢了速度并輸入a了其余部分。
我想我也可以將檔案減少到 9100 行,添加,取消截斷,然后鍵入na。但我不是在尋找技巧。我希望對 git 的內部作業更有信心,例如,如果有命令列引數可以清理它,例如
git add --linechunk:1-9100 --linechunk:9200-30000
或者...
git add --linechunk:-9100 --linechunk:9200
雖然我的方法足夠好,但知道是否有辦法做比手動修補更多的事情會很整潔。
對于那些使用 git 更敏捷的人,有沒有辦法提高效率?
uj5u.com熱心網友回復:
這里最簡單的方法是git diff制作補丁檔案,編輯并應用它。
換句話說,你實際上是在做一個git add --patch但不是互動式的,從而避免了等待你的專線來的乏味。
例子:
% git diff > ~/Desktop/mypatch.txt
# edit the patch file in your favorite editor,
# undoing the part you don't want changed
# don't forget to save!
% git apply --cached -- ~/Desktop/mypatch.txt
% git commit
編輯: @root 在評論中指出git add --edit(或簡單地說git add -e)更緊湊地做同樣的事情。這是真的,所以值得一提。我喜歡在自己的時間里處理自己的補丁檔案的奢侈,但如果你不介意在 Git 等待你關閉編輯器時處理補丁,這可能是一個更簡單的選擇。
uj5u.com熱心網友回復:
git add -p是一個方便的工具,可以了解減少的變更集,恕我直言,在您的情況下,您對它的期望有點過高。
應該記住,目標結果只是能夠將您想要的檔案版本放在索引中。
以下是達到該結果的其他一些方法:
運行
git gui,在暫存區添加完整檔案,然后滾動暫存檔案以取消暫存您正在尋找的兩個塊(根據我的經驗:雖然它的界面看起來很笨重,但它git gui是一個非常有用的工具,可以在之前查看和編輯您的更改提交,并有一個“添加此行/洗掉此行”,適用于所有情況)將該檔案重命名為
filename.tmp、運行git checkout filename、應用搜索和替換、添加和提交,然后恢復您的初始檔案 (mv filename.tmp filename)存盤您當前的更改,重新應用“搜索 替換”,提交該檔案,運行
git stash pop(根據您的描述,看起來甚至不應該存在沖突,但如果有解決方法可能是采用該版本從藏匿處)撤消您的搜索和替換(您的
ctrl Z堆疊中仍然有它,或者只是替換),提交或存盤該檔案版本,然后重新應用您的搜索和替換,并提交該新版本(您現在有兩個提交,你可以變基/櫻桃挑選...)ETC ...
uj5u.com熱心網友回復:
作為一個幾乎評論,因為馬特的回答對于這種極端情況來說可能是最好的,但git reset也有一個--patch選項(就像 一樣git checkout),所以你可以輕松地清理錯誤。
另外:任何體面的程式員的編輯器都會有一個 Git 插件,它可以直接從編輯緩沖區中暫存和取消暫存大塊,因此添加整個內容并取消暫存您不想要的部分更容易。git gui可以為那些編輯無法管理的人做到這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483499.html
上一篇:如何獲取在分支上提交的更改,并且僅在Git中的該分支上?
下一篇:Git隨機丟失跟蹤
