2017-05-25 82 views
0

我剛纔已經應用了patch 3個文件,其diff可以在這裏看到:Git和添加-p問題

stack.hstack.cmain.c

的任務是將patch分離成各種commit S,這樣的評論,許可證,重構等

爲此,我將使用git add -p

  1. 第一大塊是main.c許可證,小事,我按y

  2. 第二大塊位於stack.c,包含一大堆許可證,後面跟着兩個評論。我s PLIT然後ynn

  3. 我會繼續做這行的git add -p休息。

然而,它看起來像n沒有應用!

爲了證實我的懷疑,我會再次做一次新的git add -p,這次我會用ethis會變成this

git然後輸出fatal: corrupt patch at line 50。所以基本上我的sn試圖不要階段特定的人,但結束了丟棄那些清除。

+行應該被刪除沒有問題不像-(你必須用空格替換該行),對吧?我究竟做錯了什麼?

回答

1

看起來你沒有按照git add -p + git commit在每一步。 n說「不」,意味着其餘的變化尚未上演。您需要重複git add -p,然後按git commit重複您希望顯示在每次提交中的每種更改。

然而,它看起來像沒有應用!

這是設計。這意味着你不想在索引中找到它。所以變化沒有上演。當你提交時,它們將不會成爲該提交的一部分。你必須重複這個過程來獲得/之前的迭代。

您完成git add -p + git commit迭代,一旦沒有更多未完成的更改提交。

再說一遍,你對n所說的「不」,將不會成爲你用git commit所做的承諾的一部分。

這可能是你需要了解git的分段(或索引)是如何工作的。

+0

我不確定我是否理解。我使用'git add -p',並開始向我展示哪些地方會有各種選項('y,n,q,a'等)。我做出我的選擇,然後再來一個大塊頭,直到沒有更多的人可用,那麼我會'承諾'。但問題是我不會'承諾',因爲我只想要這個提交添加許可證,而不是評論。這就是爲什麼我排除一切,但許可證。 –

+0

它不會,它只會添加你認爲是的笨蛋。下一次,當你做'git add -p'的時候,你說的肯定和承諾的hunk不會出現。重複此循環直到您完成所有更改。 –

+0

呵呵,所以當我有'cat'文件並且已經有了「應用」的變化時,它們只是在本地進行了更改,我可以將這些變更分解爲「提交」,對吧? –