2016-05-25 36 views
1

我有一個大而複雜的git diff。它有大約1200個案例,它刪除了一個包含字符串「fubar」的行(如果有的話,用引號)。我想要做的是應用修補程序,但不要刪除這些行。從git補丁中刪除行而不損壞

我試着從補丁文件中刪除以下表單的每一行。問題是行號是錯誤的,所以補丁已損壞。在編輯行號碼時,我想知道是否有解決問題的方法。

我刪除:

- (whatever here) "fubar" (whatever else here) 
+0

什麼commad你鍵入? 'git apply'?你可以粘貼你輸入的完整命令(以及你嘗試應用的更完整的補丁文件)嗎?你熟悉'git add -p'命令 – Asenar

+0

該死的,版本太晚了-_-你的錯誤信息是什麼? – Asenar

+0

損壞的修補程序xxx行 –

回答

0

基本上,你必須複製的完整產品線,然後«刪除»的第一個字符(通過在開始一個-線的替換空間),和「添加」第二個改變(意思是用+代替)。在差異中,第一列是有關線路狀態的指標(添加,刪除或未更改)。

的「在行XXX腐敗補丁」可能意味着一個空間丟失,或您刪除行「字面上」,而不是將其標記爲移除(減號-

2

如果你想在補丁不要刪除一條線,您必須在該行的開頭用空格替換-。在你的補丁中,你會有一條未修改的線路保持在上下文中。

替換:

- (whatever here) "fubar" (whatever else here) 

(whatever here) "fubar" (whatever else here) 

(請注意,在修改後的行中的文本仍與原來,這證實了-用空間,而不僅僅是更換對齊刪除。)

要更好地理解修補程序,請看下面的示例:

diff --git a/test.txt b/test.txt 
index 67179f2..9c17455 100644 
--- a/test.txt 
+++ b/test.txt 
@@ -2,6 +2,8 @@ Line 1 
Line 2 
Line 3 
Line 4 
+Line 4.5 
+Line 4.6 
Line 5 
Line 6 
Line 7 
@@ -10,8 +12,6 @@ Line 9 
Line 10 
Line 11 
Line 12 
-Line 13 
-Line 14 
Line 15 
Line 16 
Line 17 
@@ -19,7 +19,7 @@ Line 18 
Line 19 
Line 20 
Line 21 
-Line 22 
+Line 22 the cops 
Line 23 
Line 24 
Line 25 

第一線:

diff --git a/test.txt b/test.txt 
index 67179f2..9c17455 100644 
--- a/test.txt 
+++ b/test.txt 

告訴我們:

  • 的DIFF關注文件test.txt在我們的標籤a一個版本,並在我們的標籤b版本相同的文件test.txt;
  • 版本a中的文件存儲在散列67179f2和版本b下的散列9c17455(這些不是提交哈希,但對象散列,如果我沒有弄錯);
  • -表示版本a+表示版本b

然後,我們有一個大塊:

@@ -2,6 +2,8 @@ Line 1 
Line 2 
Line 3 
Line 4 
+Line 4.5 
+Line 4.6 
Line 5 
Line 6 
Line 7 
  • -2,6意味着它代表a版本6行,起始於第2行;
  • +2,8意味着它代表b版本8行,在行開始2.

事實上,我們添加了兩行,Line 4.5Line 4.6,我們可以從+線看到:

+Line 4.5 
+Line 4.6 

注意,爲上下文顯示的其他未修改的行如何以空格將它們標記爲上下文行。

如果您想要修改您的修補程序而不添加Line 4.6,則必須刪除相應的+行。但是,你也必須糾正大塊的行數,因爲你只添加一條線,所以你最終以7行,而不是8:

@@ -2,6 +2,7 @@ Line 1 
Line 2 
Line 3 
Line 4 
+Line 4.5 
Line 5 
Line 6 
Line 7 

在我們的第二大塊:

@@ -10,8 +12,6 @@ Line 9 
Line 10 
Line 11 
Line 12 
-Line 13 
-Line 14 
Line 15 
Line 16 
Line 17 
  • -10,8表示它代表版本爲a的8行,從第10行開始;
  • +12,6意味着它代表b版本6行,開始於12行

它開始於因爲通過先前的大塊添加的兩條線的線12。通常情況下,您必須將12調整爲11,因爲您現在只在前一個塊中添加一行,但實際上不需要,因爲上下文行可幫助識別修改的實際行。

現在,如果您不想刪除第14行,因爲您只是迷信第13行,您必須將第14行保留在那裏,但作爲上下文行,因爲在應用修補程序後它仍然存在。所以,你改變-的空間,並更正行數(你結束了7行,不是6):

@@ -10,8 +12,7 @@ Line 9 
Line 10 
Line 11 
Line 12 
-Line 13 
Line 14 
Line 15 
Line 16 
Line 17 

最後,最後一大塊:

@@ -19,7 +19,7 @@ Line 18 
Line 19 
Line 20 
Line 21 
-Line 22 
+Line 22 the cops 
Line 23 
Line 24 
Line 25 

它正在改變Line 22Line 22 the cops,刪除舊的行並添加修改的行。它始於第19行,之前和之後,因爲前面的人總是刪除了他們總共添加的相同行數,並且涉及7行兩種方式,因爲它增加了一行並刪除了一行。

您可以用不同的方式改變改變。更改修改行的內容:

@@ -19,7 +19,7 @@ Line 18 
Line 19 
Line 20 
Line 21 
-Line 22 
+Line 22 THE COPS 
Line 23 
Line 24 
Line 25 

或添加一個額外的行:

@@ -19,7 +19,8 @@ Line 18 
Line 19 
Line 20 
Line 21 
-Line 22 
+Line 22 
+ the cops 
Line 23 
Line 24 
Line 25 

可以簡化,因爲它不修改了22行:

@@ -19,7 +19,8 @@ Line 18 
Line 19 
Line 20 
Line 21 
Line 22 
+ the cops 
Line 23 
Line 24 
Line 25