【问题标题】:Git and add -p problemsGit 和添加 -p 问题
【发布时间】:2017-10-25 12:57:23
【问题描述】:

我刚刚对 3 个文件应用了patch,他们的diff 可以在这里看到:

stack.hstack.cmain.c

任务是将patch分离成各种commits,如cmets、license、重构等。

为此,我将使用git add -p

  1. 第一个大块是main.c的许可证,微不足道,我按y

  2. 第二个大块位于stack.c 中,包含一大块许可证,后跟两个大块 cmets。我split 然后y n n

  3. 我将在 git add -p 的其余部分继续这样做。

但是,似乎没有应用 n

为了证实我的怀疑,我将再次使用git add -p,这次我将使用ethis 将变为this

git 然后输出fatal: corrupt patch at line 50。所以基本上我的sn 试图不上演某些帅哥,但最终放弃了这些删除。

+- 不同(您必须用空格替换该行),应该毫无问题地删除行,对吗?我做错了什么?

【问题讨论】:

    标签: git whitespace git-add git-patch git-stage


    【解决方案1】:

    看起来您在每一步都没有关注git add -p + git commit。用n 说“不”意味着剩余的更改尚未上演。对于要在每次提交中出现的每种类型的更改,您需要重复 git add -p 后跟 git commit

    但是,看起来 n 都没有应用!

    这是设计使然。这意味着您不希望在索引中使用它。所以这些变化没有上演。当您提交时,它们将不会成为该提交的一部分。您必须像上一次迭代一样重复该过程以获取 /那些/。

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

    再一次,你对 n 说“不”的大块头不会成为你对 git commit 所做的提交的一部分。

    您可能需要了解 git 的暂存(或索引)如何工作。

    【讨论】:

    • 我不确定我是否理解。我使用git add -p 并开始向我展示我将有各种选择的帅哥(y, n, q, a 等)。我做出选择,然后下一个帅哥来了,直到没有更多帅哥可用,然后我会commit。但问题是我不会commit,因为我只希望这个提交添加许可证,而不是 cmets。这就是为什么我排除了除许可证之外的所有内容。
    • 它不会,它只会添加你同意的帅哥。下一次,当您执行git add -p 时,您答应并承诺的帅哥不会出现。您重复此循环,直到您提交所有更改。
    • 哦,所以当我 cat 文件并且已经“应用”了更改时,它们只是在本地进行了更改,我可以将这些更改拆分为 commits,对吗?
    • 除了 Adam 的(正确)答案之外,您可能还想阅读使用 git diff --cachedindex 中的内容(选择性分阶段的部分)与当前的内容进行比较在HEAD(当前)提交中。这向您展示了您现在使用git commit 进行的提交会有什么不同,即 HEAD 文件和索引文件之间的区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多