我已經對代碼文件做了一堆更改,並在執行它之前檢查diff。從git編輯gunk時修復「修補程序不適用」-p
總結我的更改:我已將常規類聲明轉換爲模板類定義。在這樣做的時候,我從文件底部取出了一大塊代碼,並將它移動到頂部(現在需要在類之前定義的異常類),然後我將一堆代碼(方法聲明),每行代碼有幾行代碼(方法實現)。
Git無法正確地檢測到我的更改的上下文,並且基本上已刪除並添加了一行大混雜,這兩行之間並不一定有任何連接。差異。爲了稍後更容易檢查這些變化,我轉移了一系列更改以使其處於上下文環境中,但要小心保持所有添加和刪除的行按照相同的順序排列,保持添加和刪除的行數不變,等等。 。
當我做,我得到了錯誤消息
error: patch failed: include/aof/physics/magnetic-field.hpp:143
error: include/aof/physics/magnetic-field.hpp: patch does not apply
Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?
好了,我什麼地方搞錯了。好的,我會再試一次。同樣的消息。
如果我回答上面的y
,我可以回到我編輯的補丁,但是因爲我不知道它有什麼問題,所以對我無能爲力。在嘗試幾次不成功地編輯補丁後,我不禁想知道:有沒有辦法在這裏獲得更好的錯誤信息?我怎麼弄出爲什麼這個補丁不適用,所以我可以修復它?爲了澄清什麼,我試圖完成
原始補丁
簡單的例子。不太容易看到這裏發生了什麼...
- ClassConstructor(const OtherClass& other, double d);
+ ClassConstructor(const TOtherClass& other, double d) : _other(other), _d(d) {
- void method1() const;
- double calculation() const;
- double otherCalculation() const;
+ _a = 1/d;
+ }
- ~ClassDestructor() { }; // Yes, of course it's more sensibly named
- };
+ void method1() const {
+ // this method does nifty stuff.
- struct my_exception_type : public std::runtime_error {
- my_execption_type() : runtime_error("oops!") {
}
- virtual const char* what() const throw() {
- std::ostringstream cnvt;
- cnvt << runtime_error::what() ": Sorry, I shouldn't have done this...";
+ double calculation() const {
+ return _a + _d;
+ }
- return cnvt.str().c_str();
+ double otherCalculation() const {
+ return 0.; // I'm lazy
}
+ ~ClassDestructor() { }; // Yes, of course it's more sensibly named
};
我試圖編輯它。 (這個編輯是在SO完成的,所以不確定這個特定的編輯是否存在問題,但是你知道我正在對這個編輯進行什麼樣的編輯)。更容易理解這些變化,你不覺得嗎?
- ClassConstructor(const OtherClass& other, double d);
+ ClassConstructor(const TOtherClass& other, double d) : _other(other), _d(d) {
+ _a = 1/d;
+ }
- void method1() const;
+ void method1() const {
+ // this method does nifty stuff.
+ }
- double calculation() const;
+ double calculation() const {
+ return _a + _d;
+ }
- double otherCalculation() const;
+ double otherCalculation() const {
+ return 0.; // I'm lazy
+ }
};
- struct my_exception_type : public std::runtime_error {
- my_execption_type() : runtime_error("oops!") {
- }
- virtual const char* what() const throw() {
- std::ostringstream cnvt;
- cnvt << runtime_error::what() ": Sorry, I shouldn't have done this...";
- return cnvt.str().c_str();
- };
顯然,有一個與具有空行正確等數決策失誤的風險,但我的問題是,不僅在於它很難確保它是正確的 - 這也很難弄清楚我犯了什麼錯誤。
請問這個問題有幫助:http://stackoverflow.com/questions/3268596/git-add-interactive-your-edited-hunk-does-not-apply? – LeGEC
@LeGEC:這個問題在故障排除中給出了有用的指導,但它並沒有給我更多的東西,比我目前所做的還要多。沒有任何信息對我來說是全新的,並且它們都不是我目前的補丁(無論當前的補丁是什麼)。這個問題是,如果有一種方法可以從'git'本身中擠出更多的信息錯誤信息。 –
我不確定我完全理解你想要達到的目標。你是否試圖編輯補丁,以便git記得「第1行」實際上是「第13行」的替代品,「第2行」實際上是「第26行」的替代品,等等......? – LeGEC