2017-05-25 50 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'文件并且已经有了“应用”的变化时,它们只是在本地进行了更改,我可以将这些变更分解为“提交”,对吧? –