代码之家  ›  专栏  ›  技术社区  ›  Simon

git add-p(交互式补丁)和编辑模式会出现“第XX行的损坏补丁”错误

  •  1
  • Simon  · 技术社区  · 6 年前

    git add -p ,现在我想使用手动hunk编辑模式。

    # Manual hunk edit mode -- see bottom for a quick guide
    @@ -46,6 +46,7 @@ function signIn(email, password) {
                 }
             })
             .catch((error) => {
    +            console.log(error);
                 ToastAndroid.show(translations.translations.error_occurred, ToastAndroid.SHORT);
                 that.setState({isLoading: false});
             });
    # ---
    # To remove '-' lines, make them ' ' lines (context).
    # To remove '+' lines, delete them.
    # Lines starting with # will be removed.
    

    如果我完全删除添加的行(使用 console.log

    error: corrupt patch at line 12
    

    我完全不知道我做错了什么。

    1 回复  |  直到 6 年前
        1
  •  3
  •   torek    6 年前

    [注:评论变成了答案-最上面的部分是你需要的,剩下的只是解释]

    很多细节,只有有趣的时候才读

    请注意,在您进行下一个承诺时,始终有三个我称之为 活动副本 每个文件。好吧,更准确地说,有 高达 git checkout . 此副本存储在提交中,基本上是只读的:您 更改它,因为它是特定提交的一部分。但是你可以 接近 你喜欢什么时候都行。例如,给定 README.txt 可以运行的文件:

    git show HEAD:README.txt
    

    在你的 ,你可以在那里工作。这本书以普通的计算机格式保存,以便你能阅读。您的editorom或emacs或sublime或vim或任何您使用的文件都可以读写。你的编译器,如果你编译程序,可以读写它,等等。你不需要对这个文件做任何特殊的处理,因为它和其他任何文件一样。奇怪的是, 吉特 自述文件 Git必须是一种放手,因为 可以改变它!

    但是有一个 第三的 自述文件 这也是Git所说的 指数 ,或 中转区 隐藏物 git show :README.txt ,是特殊的Git格式,但不同于 ,你 可以 覆盖这个。平常的 你覆盖这个是用 git add ,这只是 将工作树文件复制到索引中 .

    :README.txt 开始 HEAD:README.txt 文件。如果更改工作树副本,则头版本和索引版本仍然匹配。如果你那么 git add README.txt 标题:README.txt 不再匹配,但是 比赛 .

    这里就是 git add -p 进来:如果 指数 复制和 工作树 改变 与工作树版本匹配的索引版本。如果Git遵循修补程序中的所有说明,则会将文件的索引副本更改为与工作树副本匹配,就像 会的。

    但现在吉特 一次只穿一块,然后:

    • 告诉Git按原样应用;或
    • 修改更改说明以便 贴上补丁。

    注意,有一个同伴 git add-p git reset -p README.txt 告诉Git它应该比较 标题:README.txt :自述文件.txt HEAD 再抄一遍。然后Git将经历与for相同的过程 git add-p


    最后,让我们看看 git status . 这做了很多有用的事情,但是它告诉你 准备提交的更改 未准备提交的更改 从本质上讲,是由两个 git diff

    • 有什么不同 头部

    对于这里完全相同的每一个文件,Git都对此保持沉默。但是如果 是不同的,吉特告诉你 在里面 .

    列出所有这些文件后,Git运行第二个diff,这次是为了找出:

    • 索引和工作树有什么不同?

    不同的 ,Git告诉你 . 那是因为你 能够 运行 git添加

    如果你要逃跑 git commit 新的 提交自 现在索引里有什么 ,所以 头部 -vs index告诉您: 在这个新的任务中,与 承诺。 同时,index vs work tree告诉您: 能够 与众不同,但除非你 他们。

    第二个diff也是发现 文件夹。一个未跟踪的文件,很简单,是一个在工作树中,但不在索引中的文件。如果这样的文件是 ,吉特闭嘴了。如果未跟踪的文件是 忽略,Git告诉您它是未跟踪的。注意一个文件 在索引中按定义跟踪,因此Git甚至从不检查ignore指令。

    这个关于新的/未跟踪的文件的事实就是为什么 每个文件三份。如果创建一个新文件,它不在 头部 git添加 将其复制到索引中的文件。因此,首先只在工作树中创建一个副本;然后在索引树和工作树中创建两个副本。然后你做一个 新的 变成 电流( 头部 )提交,然后才有新文件的三个副本。